VPS参考测评推荐
专注分享VPS主机优惠信息
衡天云优惠活动
华纳云最新优惠促销活动
jtti最新优惠促销活动

通过php实现APP微信支付的实例分析(PHP实现微信支付功能)

locvps
主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情!
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作

如今,使用app微信支付已成为主流支付方式。下面小编将介绍一个通过php实现app微信支付的例子,简单易学。让我们学习小编的app微信支付。

首先,PHP后台生成预付交易表单,返回正确的预付交易回复id,然后在APP中调整支付!

官方文档:https://pay . weixin . QQ . com/wiki/doc/API/app/app . PHP?第91章

根据文档拼接微信所需的参数,这里有几种方法可以直接编码!

传输到微信的参数要组装成xml格式发送,比如参数数组!

公共函数to XML($ data = array()){ if(!is _ array($ data)| | count($ data)$ val){ if(is _ numeric($ val)){ $ XML。="".瓦尔。"";}else{ $xml。="";} } $xml。="";返回$ xml}2.生成随机字符串,微信要求的参数!这里有很多方法,只看你的爱好!

函数rand _ code(){ $ str = & # 39;0123456789 abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz & # 39;;//62个字符$ str = str _ shuffle($ str);$ str = substr($ str,0,32);return $ str}3.这是微信的重要一步,这个方法会被多次使用!生成签名

私有函数getSign($ params){ ksort($ params);//按照参数名的ASCII码从小到大对参数数组进行排序foreach($ params as $ key =》$ item){ if(!empty($ item)){//排除参数$ newArr【】= $ key。'='。$ item//集成新的参数数组} } $ string a = embed(“&“,$ new arr);//使用&符号连接参数$ stringsigntemp = $ stringa。“&key =“。"* * * * * * * * * * * * * * * * * *";//拼接密钥//密钥为商家平台API安全中设置的$ Stringsigntemp = MD5($ Stringsigntemp);//用MD5 $ sign = strto upper($ stringsigntemp)加密字符串;//将所有字符转换为大写return $符号;}4.将参数传递到微信生成预付款订单!接收微信返回的数据,发送回APP,APP调用支付接口完成支付!app所需参数请参考微信文档:https://pay . weixin . QQ . com/wiki/doc/API/APP/APP . PHP。chapter=9_12&index=2

public function wx _ pay(){ $ nonce _ str = $ this -》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';//回拨地址,必须是用户收到付款通知后可直接访问的网站,不能与参数$ data【& # 39;trade _ type & # 39] = 'APP & # 39;//支付方式//将已签名的数据保存到数组中注意:上述参数附加到$data中,其中还应包括开发文档$data中除sign required之外的所有数据【& # 39;标志& # 39;】= $ this -》get sign($ data);//获取签名$ XML = $ this -》to XML($ data);//数组转换为xml //curl并传递给微信$ URL =“https://API . mch . weixin . QQ . com/pay/unified order“;//header(“content -type: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 _ sslversion,curl _ SSL version _ TLS v1);curl _ setopt($ ch,CURLOPT_HEADER,FALSE);//要求结果为字符串并输出到屏幕curl _ set opt($ ch,curl opt _ return transfer,true);//设置超时curl _ setopt($ ch,curl opt _ timeout,30);curl _ setopt($ ch,CURLOPT_POST,TRUE);//传输文件curl _ set opt($ ch,curl opt _ postfields,$ XML);//运行curl $ data = curl _ exec($ ch);//返回结果if($ data){ curl _ close($ ch);//成功返回,将xml数据转换为数组。$ re = $ this -》from XML($ data);if($ re【& # 39;return _ code & # 39] != '成功& # 39;){ JSON(“201“,& # 39;签名失败& # 39;);} else{ //接收微信返回的数据并发送给APP!$ arr = array(& # 39;预付费& # 39=》$ re【& # 39;prepay _ id & # 39], 'appid & # 39=> 'wxdbc 5c DC * * * * * & # 39;, 'partnerid & # 39=> '14937****', '套餐& # 39;=> 'Sign = WXPay & # 39, '非明星=》$ nonce _ str,& # 39;时间戳& # 39;=》time(),);//第二次生成签名$ sign = $ this -》get sign($ arr);$ arr【& # 39;标志& # 39;】= $ signJSON(& # 39;200','签名成功& # 39;,$ arr);} } else { $ error = curl _ errno($ ch);curl _ close($ ch);JSON(& # 39;201',“curl错误,错误代码:$ error”);} }5.将xml数据转换为数组,在接收微信返回的数据时使用。

from XML($ 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第二,APP支付成功后,会拨打你填写的回拨地址。

返回参数见微信文档:https://pay . weixin . QQ . com/wiki/doc/API/app/app . PHP。chapter=9_7&index=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 -》get sign($ data)){//签名验证成功后,判断if($ data【& # 39;result _ code & # 39] == '成功& # 39;){//根据返回的订单号$ arr = array(& # 39;pay _ status & # 39=> 1, );$ re = M(& # 39;订单& # 39;)-》where(【& # 39;order _ sn & # 39=》$ data【& # 39;out _ trade _ no & # 39】】)-》save($ arr);//处理完成后,告诉微信成功结果!if($ re){ echo & # 39;';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-DH: I: s”)、时间()。“\ r \ n“);}}到这里,微信APP支付流程已成功完成!感谢您的支持!

以上就是PHP实现APP微信支付的具体方法。相信大家通过小编个例子已经掌握了。

相关建议:

微信支付报警通知示例

PHP微信支付开发的微信退款功能示例

Thinkphp集成微信支付功能详解

以上是通过PHP实现APP微信支付的实例分析的详细内容。更多资讯请关注主机参考其他相关文章!

这几篇文章你可能也喜欢:

本文由主机参考刊发,转载请注明:通过php实现APP微信支付的实例分析(PHP实现微信支付功能) https://zhujicankao.com/105900.html

【腾讯云】领8888元采购礼包,抢爆款云服务器 每月 9元起,个人开发者加享折上折!
打赏
转载请注明原文链接:主机参考 » 通过php实现APP微信支付的实例分析(PHP实现微信支付功能)
主机参考仅做资料收集,不对商家任何信息及交易做信用担保,购买前请注意风险,有交易纠纷请自行解决!请查阅:特别声明

评论 抢沙发

评论前必须登录!