支付步驟邏輯:
#1.小程式發起請求預付
2. 服務端呼叫介面啟動預付資訊
3. 微信小程式調起付款完成付款
1. 小程式發起請求預付
#2.服務端呼叫介面發起預付資訊
服務端接收到請求後,呼叫微信的api接口,呼叫成功會得到一個prepay_id 這個就是相當於小程式的預付id 過程中會產生簽名,依照官方文件的實例參數產生即可,如果非必填可選擇不填,然後向api 發送一個xml
<xml> <appid>wx2421b1c4370ec43b</appid> <attach>支付测试</attach> <body>JSAPI支付测试</body> <mch_id>10000100</mch_id> <detail><![CDATA[{ "goods_detail":[ { "goods_id":"iphone6s_16G", "wxpay_goods_id":"1001", "goods_name":"iPhone6s 16G", "quantity":1, "price":528800, "goods_category":"123456", "body":"苹果手机" }, { "goods_id":"iphone6s_32G", "wxpay_goods_id":"1002", "goods_name":"iPhone6s 32G", "quantity":1, "price":608800, "goods_category":"123789", "body":"苹果手机" } ] }]]></detail> <nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str> <notify_url>[url]http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>[/url] <openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid> <out_trade_no>1415659990</out_trade_no> <spbill_create_ip>14.23.150.211</spbill_create_ip> <total_fee>1</total_fee> <trade_type>JSAPI</trade_type> <sign>0CB01533B8C1EF103065174F50BCA001</sign> </xml>
要注意sign 產生方式和公有號產生方式一致,以下是PHP產生簽章方法, 可依不同的框架修改,記得修改key
/** * 生成签名 * @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值 */ public function MakeSign() { //签名步骤一:按字典序排序参数 ksort($this->_prepay); $string = $this->ToUrlParams(); //签名步骤二:在string后加入KEY $string = $string . "&key=".WxPayConfig::KEY; //签名步骤三:MD5加密 $string = md5($string); //签名步骤四:所有字符转为大写 $result = strtoupper($string); return $result; } /** * 格式化参数格式化成url参数 */ public function ToUrlParams() { $buff = ""; foreach ($this->values as $k => $v) { if($k != "sign" && $v != "" && !is_array($v)){ $buff .= $k . "=" . $v . "&"; } } $buff = trim($buff, "&"); return $buff; }
呼叫統一下單api
#
/** * 统一下单调取返回值 * @return mixed * $output['return_code'] 状态码 SUCCESS/FAIL * $output['return_msg'] 返回信息,如非空,为错误原因 签名失败 参数格式校验错误 * $output['time'] 当前时间戳 * $output['nonceStr'] 随机字符串 * $output['prepay_id'] 预支付id * $output['sign'] 签名 * */ public function pay_place_order() { $xml = '<xml> <appid>'.$this->_prepay['appid'].'</appid> <body>'.$this->_prepay['body'].'</body> <mch_id>'.$this->_prepay['mch_id'].'</mch_id> <nonce_str>'.$this->_prepay['nonce_str'].'</nonce_str> <notify_url>'.$this->_prepay['notify_url'].'</notify_url> <openid>'.$this->_prepay['openid'].'</openid> <out_trade_no>'.$this->_prepay['out_trade_no'].'</out_trade_no> <spbill_create_ip>'.$this->_prepay['spbill_create_ip'].'</spbill_create_ip> <total_fee>'.$this->_prepay['total_fee'].'</total_fee> <trade_type>'.$this->_prepay['trade_type'].'</trade_type> <sign>'.$this->MakeSign().'</sign> </xml>'; //调用api,自定义对参数进行处理,改请求方式是自定义方式 $xml_result = post_request_https('https://api.mch.weixin.qq.com/pay/unifiedorder', $xml);
以上是微信小程式支付流程的詳細內容。更多資訊請關注PHP中文網其他相關文章!