package main import ( "net/http" "net/url" "strconv" "strings" "time" ) // var url = "https://deposit.paylomo.net/pay.php?r=payEasy" //production // var url = "https://deposit-mac.chinapaytech.com/pay.php?r=payEasy" //test // var md5p2p = "370296119874502" // var md5fat = "207841502473198" type RpnReq struct { version string sign_type string mid string notify_url string order_id string order_amount string order_time string //YYYYMMDDHHMMSS user_id string user_name string user_cardno string signature string } //build request from leanwork request forms func (m *RpnReq) buildReqByForm(form url.Values) RpnReq { r := RpnReq{} r.version = "1.1" r.sign_type = "MD5" r.mid = "EU85201311P2P" r.notify_url = "http://rpn.supertraderfx.ayvwd8em49pvoa3g.com/rpn_notify" r.order_id = form["orderNo"][0] r.order_amount = form["orderAmount"][0] //cents r.order_time = m.now() r.user_id = form["customerId"][0] r.user_name = "SuperForex" r.user_cardno = "6212262002002377849" r.signature = md4RpnFormP2P(r) *m = r return r } func (m *RpnReq) now() string { t := time.Now() return t.Format("20060102150405") } //send request to RPN to initiate transaction func (m *RpnReq) SendReq(form url.Values) (*http.Response, error) { r := m.buildReqByForm(form) hc := http.Client{Timeout: 15 * time.Second} myForm := url.Values{} myForm.Set("version", r.version) myForm.Set("sign_type", r.sign_type) myForm.Set("mid", r.mid) myForm.Set("notify_url", r.notify_url) myForm.Set("order_id", r.order_id) myForm.Set("order_amount", r.order_amount) myForm.Set("order_time", r.order_time) myForm.Set("user_id", r.user_id) myForm.Set("user_name", r.user_name) myForm.Set("user_cardno", r.user_cardno) myForm.Set("signature", r.signature) //req, err := http.NewRequest("POST", "https://lawipac.com/dumprequest.php", strings.NewReader(myForm.Encode())) req, err := http.NewRequest("POST", Config.Rpn.UrlTest, strings.NewReader(m.encode())) if err != nil { panic("wrong") } req.Header.Add("Content-Type", "application/x-www-form-urlencoded") req.Header.Add("content-Length", strconv.Itoa(len(form.Encode()))) return hc.Do(req) //Config.Rpn.UrlTest // return http.PostForm(Config.Rpn.UrlTest, myForm) //return http.PostForm("https://lawipac.com/dumprequest.php", myForm) } //encode without disturbing it's original order func (m *RpnReq) encode() string { s := "version=" + m.version s += "&sign_type=" + m.sign_type s += "&mid=" + m.mid s += "¬ify_url=" + url.QueryEscape(m.notify_url) s += "&order_id=" + m.order_id s += "&order_amount=" + m.order_amount s += "&order_time=" + m.order_time s += "&user_id=" + m.user_id s += "&user_name=" + m.user_name s += "&user_cardno=" + m.user_cardno s += "&signature=" + m.signature return s } // '1.1', // 'sign_type'=> 'MD5', // 'mid' => 'EU85201311P2P', //must to use your mid // 'notify_url' => 'https://lawipac.com/dumprequest.php', // 'order_id' => "demo-" . date('YmdHis'), // 'order_amount' => 120000 , //round($_POST['amount']*100), // 'order_time' => date('YmdHis'), // 'user_id'=> 'supertraderP2P', //$_POST['user_id'], // 'user_name'=>"zhang3", //urlencode($_POST['user_name']), // 'user_cardno'=>"6212262002002377849" //$_POST['user_cardno'], // ); // $params = array(); // foreach ($data as $field => $value) { // if( $value == '' ) continue; // $params[] = "$field=$value"; // } // $params[] = "key=p1j4A3mEMj+ft0xkSfVULQ"; //must to use your key // $data['signature'] = md5(implode('|', $params)); // ?> // //
// // // // // // // some text