主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情! |
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作 |
现在APP微信支付已经成为主流支付方式。下面小编将介绍一个如何通过PHP实现APP微信支付的例子,简单易学。用小编来学习APP微信支付吧。
首先PHP后台生成预付费交易表单,然后返回预付费交易的正确回复标志,然后在APP内调整支付!
官方文档:https://pay . weixin . QQ . com/wiki/doc/API/app/app . PHP?第9章1
根据文件拼接微信需要的参数,这里需要的方法有几种,直接编码!
传到微信的参数要组装成xml格式发送,比如参数数组!
公共函数ToXml($data=array()) { if(!is _ array($ data)| | count($ data) lt;= 0){ return # 39;数组中的异常 # 39;;} $ xml = ltxml gt";foreach($ data as $ key = gt;$ val){ if(is _ numeric($ val)){ $ XML。= lt"。$key。" gt"。$瓦尔。" lt/ ;。$key。" gt";}else{ $xml。= lt"。$key。" gt lt![CDATA[ ;。$瓦尔。"]] gt; lt/ ;。$key。" gt";} } $xml。= lt/XML gt;";返回$ xml}2.生成一个随机字符串,微信要求的参数!这里有很多方法,就看你的爱好了!
函数rand _ code(){ $ str = # 39;0123456789 abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz # 39;;//62个字符$ str = str _ shuffle($ str);$str = substr($str,0,32);返回$ str}3.这里是微信的重要一步。这个方法会用很多次!生成签名
私有函数getSign($ params){ ksort($ params);//根据参数名foreach ($ paramsas $ key = >)的ASCII码将参数数组从小到大排序;$item) { if(!Empty($item)) {//消除参数$newArr[] = $key。'='。$ item//集成新的参数数组} } $ stringa = implie( ;",$ newArr);//使用 Symbol参数$stringSignTemp = $stringA。" key = 。"* * * * * * * * * * * * * * * * * * * * * * * ;//拼接密钥// key是商家平台API安全中自己设置的$ stringsigntmp = MD5($ stringsigntmp);//用MD5 $ sign = strtop($ stringsigntemp)加密字符串;//将所有字符转换为大写return $ sign}4.把参数传到微信生成预付单!接收微信返回的数据,发回APP,APP调用支付接口完成支付!APP需要的参数见微信文档:https://pay . weixin . QQ . com/wiki/doc/API/APP/APP . PHP?章= 9 _ 12 指数=2
公共函数wx _ pay(){ $ nonce _ str = $ this - gt;rand _ code();//调用随机字符串生成方法获取随机字符串$ data[ # 39;appid # 39] ='wxdbc 5c DC * * * * * * * # 39;;//appid $ data[ # 39;mch _ id # 39] = '1493*****';//商家号$ data[ # 39;正文 # 39;]= ;APP支付测试”;$ data[ # 39;spbill _ create _ ip # 39]= $ _ SERVER[ # 39;HTTP _ HOST # 39];//ip地址$ data[ # 39;total _ fee # 39] = 1;//Amount $ data[ # 39;out _ trade _ no # 39] =时间()。mt _ rand(100009999);//商户订单号,不能重复$ data[ # 39;nonce _ str # 39]= $ nonce _ str;//随机字符串$ data[ # 39;notify _ url # 39] = 'http://xxx.xxx.com/wx_notify';//回调地址,用户收到付款后的通知,必须是可以直接访问的URL,后面不能跟参数$ data[ # 39;trade _ type # 39] = 'APP # 39;//支付方式//将参与签名的数据保存到数组中注意:以上参数追加到$data中,其中还应包含除开发文档中要求的sign以外的所有数据$ data[ # 39;标志 # 39;]= $ this - gt;get sign($ data);//获取签名$ XML = $ this ->;to XML($ data);//数组转xml //curl转微信$ URL = " https://api.mch.weixin.qq.com/pay/unifiedorder&;;//header( ;content -类型:text/XML ;);$ ch = curl _ init();curl_setopt($ch,CURLOPT_URL,$ URL);if(stripos($url, https:// ;)!==FALSE){ curl_setopt($ch,CURLOPT_SSLVERSION,CURL _ SSL version _ TLS v1);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);} else { curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格检查}//设置头curl _ setopt ($ ch,curl opt _ sslvversion,curl _ SSL version _ TLS v1);curl_setopt($ch,CURLOPT_HEADER,FALSE);//要求结果为字符串并输出到屏幕curl _ setopt ($ ch,curl opt _ return transfer,true);//设置超时curl _ setopt ($ ch,curl opt _ timeout,30);curl_setopt($ch,CURLOPT_POST,TRUE);//传输文件curl _ setopt ($ ch,curl opt _ postfields,$ XML);//运行curl $ data = curl _ exec($ ch);//返回结果if($ data){ curl _ close($ ch);//返回成功,将xml数据转换为数组。$ re = $ this ->;from XML($ data);如果($re[ # 39;return _ code # 39] != '成功 # 39;){ JSON( ;201 ,'签名失败 # 39;);} else{ //接收微信返回的数据,传给APP!$ arr = array( # 39;预付 # 39= gt$ re[ # 39;prepay _ id # 39], 'appid # 39= gt'wxdbc 5c DC * * * * * # 39;, 'partnerid # 39= gt'14937****', '套餐 # 39;= gt'Sign = WXPay # 39, '非核心 # 39;= gt$nonce_str, # 39;时间戳 # 39;= gttime(),);//第二次生成签名$ sign = $ this ->:get sign($ arr);$ arr[ # 39;标志 # 39;]= $符号;JSON( # 39;200','签名成功 # 39;,$ arr);} } else { $ error = curl _ errno($ ch);curl _ close($ ch);JSON( # 39;201', Curl错误,错误代码:$ error );} }5.将xml数据转换成数组,在接收微信返回的数据时使用。
公共函数FromXml($xml) { if(!$ XML){ echo ;Xml数据异常!";}//将xml变成数组//禁止引用外部XML实体libxml _ disable _ entity _ loader(true);$ data = JSON _ decode(JSON _ encode(SimpleXML _ load _ string($ XML, # 39;SimpleXMLElement # 39,LIBXML_NOCDATA)),true);返回$ data} 2.APP支付成功后,会调用你填写的回拨地址。
返回参数详见微信文档:https://pay . weixin . QQ . com/wiki/doc/API/app/app . PHP。章= 9 _ 7 指数=3
//微信支付回调函数wx_notify(){ //接收微信返回的数据,返回的xml格式为$ XML data = file _ get _ contents( # 39;PHP://input # 39;);//将xml格式转换为array $ data = $ this ->:from XML($ XML data);//用日志记录检查数据是否接受成功。验证一次成功后,可以删除。$ file = fopen( # 39;。/log . txt # 39;, 'a+ # 39;);fwrite($file,var_export($data,true));//为了防止错误数据,请验证签名是否与返回的签名相同。//记录返回的签名。生成签名时,必须消除符号字段。$ sign = $ data[ # 39;标志 # 39;];unset($data[ # 39;标志 # 39;]);if($ sign = = $ this - gt;get($data)){//签名验证成功后,判断if($data[ # 39;结果代码 # 39;] == '成功 # 39;){//根据返回的订单号$ arr = array( # 39;支付状态 # 39;= gt1, );$ re = M( # 39;订单 # 39;)->;其中([ # 39;order _ sn # 39= gt$ data[ # 39;out _ trade _ no # 39]])- gt;save($ arr);//处理完毕后,告诉微信成功的结果!if($ re){ echo # 39; ltxml gt ltreturn _ code gt lt![CDATA[成功]] gt; lt/return _ code gt; ltreturn _ msg gt lt![CDATA[OK]] gt; lt/return _ msg gt; lt/XML gt;';exit();} }//支付失败,错误信息else { $ file = fopen( # 39;。/log . txt # 39;, 'a+ # 39;);fwrite($file, 错误:“”。$ data[ # 39;return _ msg # 39].日期( y-m-d H:I:s ;),时间()。"\ r \ n );} } else { $ file = fopen( # 39;。/log . txt # 39;, 'a+ # 39;);fwrite($file, 错误:签名验证失败。日期( y-m-d H:I:s ;),时间()。"\ r \ n );}}这里,微信APP的支付流程已经成功完成!谢谢大家的支持!
以上是PHP实现APP微信支付的具体方法。通过小编的例子相信你已经掌握了。
相关建议:
微信支付预警通知示例
PHP支付开发的微信退款功能实例
Thinkphp集成微信支付功能详解
以上是通过PHP实现APP微信支付的案例分析的详细内容。请多关注主机参考其他相关文章!
这几篇文章你可能也喜欢:
本文由主机参考刊发,转载请注明:APP微信支付通过php (html5微信支付php)实例分析 https://zhujicankao.com/81045.html
评论前必须登录!
注册