宝哥软件园

PHP开发APP端微信支付功能

编辑:宝哥软件园 来源:互联网 时间:2021-09-06

用PHP开发APP端微信支付的个人经验

最近因为公司的需要,不得不在APP端开发微信支付。看了微信文档,感觉还不错,没有遇到太多坑,所以没有太多需要注意的点。

写一份记事文件作为备忘录。

APP支付流程

从上图可以看出,需要注意的过程共有3个部分;第一部分:调用下单API,返回预付款订单,签字后返回信息(4、5、6、7)第二部分:异步通知(15、16)第三部分:付款结果最终判断最需要注意的是第一部分:调用下单API,返回预付款订单,签字后返回信息。

微信文档中有详细说明,这里不再赘述。

附录我的代码,伸出你的手,只是改变一点代码。

//入口函数函数微信公众号(){ $ JSON=array();//生成预支付交易单的必选参数: $ NewPara=array();//应用ID $ new ParA[' appid ']=' wx 2421 B1 c 4370 EC 43 b ';//商户号$ NewParA[' mch _ id ']=' 10000100 ';//设备号$ NewParA[' device _ info ']=' WeB ';//随机字符串,这里推荐使用函数生成$ NewParA[' nonce _ str ']=' 1 add1a 30 AC 87 aa 2d b 72 f 57 a 2375 D8 FEC ';//商品描述$newPara['body']='APP支付测试;//商户订单号,这里是商户自己的内部的订单号$ NewPara[' out _ trade _ no ']=' 1415659990 ';//总金额$ NewPara[' total _ fee ']=1;//终端IP $ NewPara[' sp bill _ create _ IP ']=$ _ SERVER[' REMOTE _ ADDR '];//通知地址,注意,这里的全球资源定位器(统一资源定位符)里面不要加参数$ NewPara[' notify _ URL ']=' http://wx pay。wxutil。com/pub _ v2/pay/notify。v2。PHP ';//交易类型$ NewPara[' trade _ type ']=' APP ';//第一次签名$ new para[' sign ']=productewechatsign($ new para);//把数组转化成可扩展标记语言格式$ XMldata=获取微信XMl($ NewParA);//利用服务器端编程语言(专业超文本预处理器的缩写)的卷曲包,将数据传给微信统一下单接口,返回正常的pretee _ id $ get _ data=senpretycall($ XMldata);//返回的结果进行判断if($ get _ data[' return _ code ']==' SUCCESS ' $ get _ data[' result _ code ']==' SUCCESS '){//根据微信支付返回的结果进行二次签名//二次签名所需的随机字符串$ NewPara[' nonce _ str ']=' 5K 8264 ILTKCH 16 Cq 2502 si 8 ZNMTM 67 vs ';//二次签名所需的时间戳$ NewParA[' TiMer ']=TiMer().//二次签名剩余参数的补充$ SeCOnd Sign array=array(' appid '=$ new ParA[' appid '],' non crest '=$ new ParA[' nonce _ str '],' package'='Sign=WXPay ','预付费id'=$get_data['预付费_id'],' part erid '=$ NewPara[' mch _ id '],' timeStamp '=$ new para[' timeStamp '],);$ JSON[' datas ']=$ secondsigarray;$ JSON[' order sn ']=$ NewPara[' out _ trade _ no '];$json['datas']['sign']=微信SecondSign($newPara,$get_data['预付费_ id ']);$json['message']='预支付完成;//预支付完成,在下方进行自己内部的业务逻辑/*******************返回JSON _ encode($ JSON);} else { $ JSON[' message ']=$ get _ data[' return _ msg '];} }返回JSON _ encode($ JSON);}//第一次签名的函数productewchatsingfunction productewchatsign($ new para){ $ Stringa=self :3360 get signature($ new para);$stringSignTemp=$stringA .key=192006250 b4c 09247 EC 02 ed ce 69 F6 a 2d ';返回strtopol(MD5($ StringSignTemp));}//生成可扩展标记语言格式的函数公共静态函数得到微信XMl($ NewPara){ $ XMldata=' XMl ';foreach($ new para as $ key=$ value){ $ XMldata=$ XMldata .'。$key .$值。'/'.$key .} $xmlData=$xmlData ./XML ';返回$ xmlData}//通过卷曲发送数据给微信接口的函数函数sendbyelloercurl($ XMldata){ $ URL=' https://API。妇幼保健。微信。QQ。com/pay/统一订单';$ header[]=' Content-type : text/XML ';$ curl=curl _ init();curl_setopt($curl,CURLOPT_HTTPHEADER,$ header);curl_setopt($curl,CURLOPT_URL,$ URL);curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);curl_setopt($curl,CURLOPT_POST,1);curl_setopt($curl,CURLOPT _ POSTFIELDS,$ xmlData);$ data=curl _ exec($ curl);if(curl _ errno($ curl)){ print curl _ error($ curl);} curl _ close($ curl);返回self : xmldata palse($ data);}//xml格式数据解析函数公共静态函数XML data parse($ data){ $ msg=array();$msg=(数组)simplexml_load_string($data,' SimpleXMLElement ',LIBXML _ NOCDATA);返回$ msg}//二次签名的函数函数微信SecondSign($newPara,$ prevable _ id){ $ second Sign array=array(' appid '=$ new para[' appid '],' non estr '=$ new para[' nonce _ str '],' package'='Sign=WXPay ',' prevable id '=$ prevable _ id,' part erid '=$ new para[' mch _ id '],' timeStamp '=$ new para[' timeStamp '],);$ Stringa=self :3360 get signature($ second signature array);$stringSignTemp=$stringA .key=192006250 b4c 09247 EC 02 ed ce 69 F6 a 2d ';返回strtopol(MD5($ StringSignTemp));}两个注意点:

1.二次签名需要在后台完成,完成后会和二次签名使用的所有信息一起发送到前端,让前段唤起微信支付。这样,我们就不容易挂上微信支付了。2.用不同的随机字符串签名两次。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+