介绍
这篇文章主要介绍小程序实现微信支付的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
小程序实现微信支付的方法:
前期准备:
1。开通了微信支付,并且小程序绑定了微信支付;
2。准备好小程序的appid,微信支付的商户号,支付秘钥。
商户系统和微信支付系统主要交互:
1,小程序内调用登录接口,获取到用户的openid
2,调用商户服务器支付统一下单接口,进行预支付
/* * ,*预支付请求接口(POST) ,* @param string  openid 美元;openid ,* @param string  body 美元;商品简单描述 ,* @param string  order_sn 美元;,订单编的号 ,* @param string  total_fee 美元;金额 ,* @return , json的数据 ,*/public function 预付(){ config 美元;=,这比美元;配置; $ openid =,我(& # 39;post.openid& # 39;); $ body =,我(& # 39;post.body& # 39;); $ order_sn =,我(& # 39;post.order_sn& # 39;); $ total_fee =,我(& # 39;post.total_fee& # 39;);//统一下单参数构造 $ unifiedorder =,阵列( & # 39;appid& # 39;=祝辞,$ config [& # 39; appid& # 39;], & # 39;mch_id& # 39;=祝辞,$ config [& # 39; pay_mchid& # 39;], & # 39;nonce_str& # 39;=祝辞,self:: getNonceStr (), & # 39;身体# 39;美元=祝辞,身体, & # 39;out_trade_no& # 39;=祝辞,order_sn美元, & # 39;total_fee& # 39;=祝辞,total_fee 美元;*,100年, & # 39;spbill_create_ip& # 39;=祝辞,get_client_ip (), & # 39;notify_url& # 39;=祝辞,& # 39;https://& # 39;。$ _SERVER [& # 39; HTTP_HOST& # 39;] # 39;公司/Api/Wxpay/通知# 39; & # 39;trade_type& # 39;=祝辞,& # 39;jsapi # 39; & # 39;openid # 39;=在美元openid ); $ unifiedorder[& # 39;符号# 39;],=,self:: makeSign ($ unifiedorder);//请求数据 $ xmldata =, self:: array2xml ($ unifiedorder); 时间=美元url & # 39; https://api.mch.weixin.qq.com/pay/unifiedorder& # 39;; $ res =, self:: curl_post_ssl ($ url, xmldata美元); 如果(! $ res) { 自我::return_err(“停下来# 39;t connect 从而server"); }//,这句写入是用来查看服务器返回的结果,测试完可以删除了//写入(APP_ROOT强生# 39;静力学/log1.txt& # 39;, res美元,FILE_APPEND); $ content =, self:: xml2array (res); 如果(strval($内容[& # 39;result_code& # 39;]),==, & # 39;失败# 39;){ 自我:return_err (strval($内容[& # 39;err_code_des& # 39;])); } 如果(strval($内容[& # 39;return_code& # 39;]),==, & # 39;失败# 39;){ 自我:return_err (strval($内容[& # 39;大于# 39;])); } 自我::return_data(数组(& # 39;数据# 39;=祝辞内容)美元);//$ this→ajaxReturn($内容); }
3,调用商户服务器再次签名接口,返回支付数据
/* * ,*进行支付接口(POST) ,* @param string  prepay_id 美元;预支付ID(调用预付()方法之后的返回数据中获取) ,* @return , json的数据 ,*/public function 支付(){ config 美元;=,这比美元;配置; $ prepay_id =,我(& # 39;post.prepay_id& # 39;); $ data =,阵列( & # 39;appId& # 39;=祝辞,$ config [& # 39; appid& # 39;], & # 39;时间戳# 39;=祝辞,时间(), & # 39;nonceStr& # 39;=祝辞,self:: getNonceStr (), & # 39;包# 39;=祝辞,& # 39;prepay_id=& # 39; prepay_id美元。 & # 39;signType& # 39;=祝辞,& # 39;md5 # 39; ); $ data [& # 39; paySign& # 39;],=, self:: makeSign(元数据); $ this→ajaxReturn(元数据); }
4,小程序内完成支付,商户服务器接收支付回调通知
小程序端代码:
wx.requestPayment ({ ,,& # 39;时间戳# 39;:,& # 39;& # 39; ,,& # 39;nonceStr& # 39;:, & # 39; & # 39; ,,& # 39;包# 39;:,& # 39;& # 39; ,,& # 39;signType& # 39;:, & # 39; md5 # 39; ,,& # 39;paySign& # 39;:, & # 39; & # 39; ,,& # 39;成功# 39;:函数(res) { ,,}, ,,& # 39;失败# 39;:函数(res) { ,,} })
服务器回调通知:
//微信支付回调验证 public function  notify () { 美元$ xml =,全局变量(& # 39;HTTP_RAW_POST_DATA& # 39;);//,这句写入是用来查看服务器返回的XML数据,测试完可以删除了//写入(APP_ROOT强生# 39;静力学/log2.txt& # 39;, res美元,FILE_APPEND);//将服务器返回的XML数据转化为数组 $ data =, self:: xml2array ($ xml);//,保存微信服务器返回的签名 data_sign 美元;=,$ data[& # 39;符号# 39;];//,标志不参与签名算法 设置($ data[& # 39;符号# 39;]); $ sign =, self:: makeSign(元数据);//,判断签名是否正确,,判断支付状态 if (,(美元符号===$ data_sign),,,, ($ data [& # 39; return_code& # 39;]==& # 39;成功# 39;),,,,($ data [& # 39; result_code& # 39;]==& # 39;成功# 39;),),{ 美元$ result =,数据;//获取服务器返回的数据 order_sn 美元;=,$ data [& # 39; out_trade_no& # 39;];//订单单号 openid 美元;=,$ data [& # 39; openid # 39;];//付款人openID total_fee 美元;=,$ data [& # 39; total_fee& # 39;];//付款金额 transaction_id 美元;=,$ data [& # 39; transaction_id& # 39;];,//微信支付流水号//更新数据库 $ this→更新资料库(order_sn美元,美元openid, total_fee美元,美元transaction_id); 其他}{ $ result =,假; }//,返回状态给微信服务器 if (结果),{ $ str=& # 39; & lt; xml> & lt; return_code> & lt; ! [CDATA[成功]]祝辞& lt;/return_code> & lt; return_msg> & lt; ! [CDATA[好]]祝辞& lt;/return_msg> & lt;/xml> & # 39;; 其他}{ null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null小程序实现微信支付的方法