微信APP支付服务端php sdk开发教程

最近公司app要接入微信支付,就去研究了下,发现开发文档介绍得太不具体了,踩了很多坑,为了各位看官,避免重复踩坑,决定写下此文。

微信官方就给了2个压缩包,一个是android,一个是ios

打开发现里面只有java的服务端sdk,只能自己写php的命了。

没有专门针对服务端的文档,就打开安卓的文档看看吧。

接入流程大致如下:

1.获取access_token,这步有点类似开发平台的oauth2认证请求

http 请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

正确返回值
{"access_token":"ACCESS_TOKEN","expires_in":7200}

2.生成预支付订单

这步通过第一步得到的ACCESS_TOKEN以及手机端提交的订单信息,请求微信服务端,得到返回参数,二次签名返回给手机。

http 请求方式:POST
https://api.weixin.qq.com/pay/genprepay?access_token=ACCESS_TOKEN

{
"appid":"wwwwb4f85f3a797777",
"traceid":"crestxu",
"noncestr":"111112222233333",
"package":"bank_type=WX&body=XXX&fee_type=1&input_charset=GBK&notify_url=http%3a%2
f%2f
www.qq.com&out_trade_no=16642817866003386000&partner=1900000109&spbill_create_ip=1
27.0.0.1&total_fee=1&sign=BEEF37AD19575D92E191C1E4B1474CA9",

"timestamp":1381405298,
"app_signature":"53cca9d47b883bd4a5c85a9300df3da0cb48565c",
"sign_method":"sha1"
}

正确返回值
{"prepayid":"PREPAY_ID","errcode":0,"errmsg":"Success"}

package 生成方法:
A)对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的格
式(即 key1=value1&key2=value2…)拼接成字符串 string1;

B) 在 string1 最后拼接上 key=partnerKey 得到 stringSignTemp 字符串, 并对
stringSignTemp 进行 md5 运算,再将得到的字符串所有字符转换为大写,得到 sign 值
signValue。

C)对 string1 中的所有键值对中的 value 进行 urlencode 转码,按照 a 步骤重新拼接成字符
串,得到 string2。对于 js 前端程序,一定要使用函数 encodeURIComponent 进行 urlencode
编码(注意!进行 urlencode 时要将空格转化为%20 而不是+)。

D)将 sign=signValue 拼接到 string1 后面得到最终的 package 字符串。

app_signature 生成方法:
A)参与签名的字段包括:appid、appkey、noncestr、package、timestamp 以及 traceid
B)对所有待签名参数按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的
格式(即 key1=value1&key2=value2…)拼接成字符串 string1。
注意:所有参数名均为小写字符

C)对 string1 作签名算法,字段名和字段值都采用原始值,不进行 URL 转义。具体签名算法
为 SHA1

3.手机调起微信支付

得到服务端返回值后,手机直接带这些值唤起微信支付。(PS:手机端不要太轻松)

4.异步通知

支付成功后,微信服务端会通知我们服务端支付成功,需要我们接到通知返回接受成功,手机app才能正常提示成功哦~

 

我自己写的微信APP支付服务端php sdk

GIT项目 之后更新也在这里https://github.com/fanhefan/wechat_app_pay

下面结合上面内容介绍下sdk

pay.php文件整合了1、2两步,手机app请求这个接口必须传一个充值金额,其他根据自己的业务自己定,返回唤起微信支付的全部参数,手机端只需要接受参数唤起即可。

wechat_notify.php是用来接受异步通知的

最后wechatconfig.php要改成自己的配置信息。

接入愉快~~~

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注