1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| public function pay(Session $ssn, Request $req) { $user = $ssn->get('user');
$_params = [ 'appid' => 'your_appid', 'mch_id' => '1439831202', 'nonce_str' => md5(microtime()), 'body' => 'JSAPI支持测试', 'attach' => '支持测试', 'fee_type' => 'CNY', 'total_fee' => $req->all()['total_fee'], 'notify_url' => 'https://skb-api.sciclean.cn/test/pay/payCallback', 'trade_type' => 'JSAPI', 'openid' => $user['openid'], 'out_trade_no' => md5(time()), 'spbill_create_ip' => $this->getRealIP() ];
$_sign = ''; $WxPay = '<xml>'; ksort($_params);
foreach ($_params as $k => $v) { if(is_scalar($v) && 'sign' != $k && '' != $v) { $_sign .= $k . '=' . $v . '&'; $WxPay .= '<'.$k.'>'.$v.'</'.$k.'>'; } }
$sign = $this->getSign($_sign); $WxPay .= '<sign>'.$sign.'</sign></xml>'; $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'; $res = $this->curl_post_ssl($url, $WxPay); $res = $this->xmlToArray($res);
$params = [ 'appId' => $res['appid'], 'nonceStr' => $res['nonce_str'], 'package' => 'prepay_id='.$res['prepay_id'], 'signType' => 'MD5', 'timeStamp' => ''.time() ];
ksort($params);
$sign = ''; foreach($params as $k => $v) { $sign .= $k . '=' . $v . "&"; } $params['paySign'] = $this->getSign($sign);
return Tool::jsonResp([ 'err' => 0, 'msg' => 'Order Create Success!', 'dat' => $params ]); }
|