主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情! |
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作 |
我写了一个小程序,发现微信支付有v3版本,就想着拿一个新的支付。结果是有毒的,我就把过程录了下来。
第一,统一下单。
//统一订单公共函数微信添加订单($ name,$ ordernumber,$ money,$ OpenID){ $ URL = " https://API . mch . weixin . QQ . com/v3/pay/transactions/jsapi ;;$ URL arr = parse _ URL($ URL);$ appid = config( # 39;config.appId # 39);//appID$MC hid = config( # 39;config.mchid # 39);//商家ID $ xlid = config( # 39;config.apiXL # 39);//API序列号$ data = array();$randstr = getRanStr(16,false);//随机字符串长度不超过32 $ time = time();$ data[ # 39;appid # 39]= $ appid;$ data[ # 39;麦克希德 # 39;]= $ MC hid;$ data[ # 39;描述 # 39;]= $ name;//产品描述$ data[ # 39;out _ trade _ no # 39]= $ order number;//订单号$ data[ # 39;notify _ url # 39]= ;https://www.xffly.cn/api/admin/order/wechartCallback&;;//回调接口//$ data[ # 39;金额 # 39;]['总计 # 39;]= $ money;//Amount $ data[ # 39;金额 # 39;]['总计 # 39;] = 1;$ data[ # 39;付款人 # 39;]['openid # 39]= $ OpenID;//user openID $ data = JSON _ encode($ data);$ key = $ this - gt;getSign($data,$ URL arr[ # 39;路径 # 39;],$randstr,$ time);//Signature $ token = sprintf( # 39;mchid = % s ,序列号= % s ,nonce _ str = % s ,时间戳= % d ,签名= % s ',$mchid,$xlid,$randstr,$time,$ key);//头信息$ header = array( # 39;content -类型: # 39;。'应用/JSON;charset = ut F-8 # 39;, '接受:应用/JSON # 39;, 'user -代理:*/* # 39;, '授权:微信支付2-sha 256-RSA 2048 # 39;。$ token);$ret = curl_post_https($url,$data,$ header);返回$ ret}计算签名,按照文档做多次。
//微信支付签名公共函数get sign ($ data = array(),$ URL,$ randstr,$ time){ $ str = " POST ;。"\ n 。$url。"\ n 。$时间。"\ n 。$randstr。"\ n 。$data。"\ n ;$ key = file _ get _ contents( # 39;apiclient _ key.pem # 39);//从商家平台下载的带RSA的密钥$ str = getsha256with,$ key);返回$ str}通过统一订购接口获取prepay_id。在小程序中,使用他的wx.requestPayment接口来调整支付。没有内容,就不贴代码了。你需要一个签名来根据文件调整付款。同理。
//调用支付公共函数getwechartsign($ post){ $ data = array()的签名;$ data[ # 39;时间戳 # 39;]= $ post[ # 39;时间戳 # 39;];$ data[ # 39;非核心 # 39;]= $ post[ # 39;str # 39];$ data[ # 39;套餐 # 39;]= $ post[ # 39;套餐 # 39;];$ str = config( # 39;config.appId # 39)."\ n 。$ data[ # 39;时间戳 # 39;]."\ n 。$ data[ # 39;非核心 # 39;]."\ n 。$ data[ # 39;套餐 # 39;]."\ n ;$ key = file _ get _ contents( # 39;apiclient _ key.pem # 39);$str = getSha256WithRSA($str,$ key);返回$ str}重点是成功支付的回调,简单的毒化返回的json信息,json_decode解析变成空的。复制之后就可以解析了。据说他有bom资料,拿到后不好用。使用htmlspecialchars_decode对其进行转义,调试工具可以成功,但是真正的微信支付还是不行。最后,没有办法。在保存的日志中,你可以再次拿走它并使用它。
//微信回调写入日志文件并返回公共函数writewechatrlog($ post){ if(!is _ dir( ;上传/记录 )){ mkdir( ;上传/记录 ,0777,真);} $ log = fopen( ;upload/log/we chart . txt ;, a+ ;);if(is _ array($ post)){ $ post = JSON _ encode($ post);} fwrite($log,post。"\ n );fclose($ log);$ read = fopen( ;upload/log/we chart . txt ;, r );fseek($read,-1,SEEK _ END);$ s = # 39';while (($c = fgetc($read))!= = false){ if($ c = = ;\ n $ s)break;$ s = $ c . $ sfseek($read,-2,SEEK _ CUR);} fclose($ read);返回$ s;//取刚刚保存的最后一条回调信息}回调信息中,有加密的东西,需要解密。此传入数据是数据钠_加密_ AEAD _ AES 256GCM _解密。这种解密方法需要php扩展钠。
//微信回调解密公共函数wechartdecrypt($ str){ $ str = HTMLSPECIALCHARS _ DECODE($ str,ent _ COMPAT);$post = json_decode($str,true);$ key = config( ;config . API v3 key ;);//商家平台设置的api v3密码$ text = base64 _ decode($ post[ # 39;资源 # 39;]['密文 # 39;]);$str =钠_ crypto _ aead _ AES 256 GCM _ decrypt($ text,$ post[ # 39;资源 # 39;]['associated _ data # 39],$ post[ # 39;资源 # 39;]['nonce # 39],$ key);返回json_decode($str,true);}然后就是得到回拨信息后的业务处理。
再次看到这篇文章的朋友,如果知道为什么微信返回的json信息不能直接使用,请告诉我。谢谢,一天都没研究出来,只好先这样处理了...以上是【记录】PHP微信小程序微信支付v3的使用细节。请多关注主机参考其他相关文章!
这几篇文章你可能也喜欢:
- Windows搭建IIS+PHP+MySQL环境(Windows搭建php服务器)
- 宝塔 panel php安装扩展失败怎么办(宝塔 panel php安装扩展失败怎么办?)
- 创建mysql索引极大地优化了php应用程序的性能(创建MySQL索引极大地优化了PHP应用程序的性能模块)
- Apache+MySQL+php环境安装(示例总结)(php安装mysqli扩展)
- 微信开发实现自定义菜单代码教程(如何从微信自定义菜单跳转到网页)
本文由主机参考刊发,转载请注明:【记录】PHP微信小程序使用微信支付v3 https://zhujicankao.com/73505.html
评论前必须登录!
注册