微信APP支付填坑记

来源:互联网 发布:qsv格式转换器mac版 编辑:程序博客网 时间:2024/04/30 09:54

首先吐槽几句,微信支付很强大,古人有诗赞曰:自古多坑空余恨,此坑绵绵无绝期。

先说几个必做前置任务:

1 在微信商户平台设置你的公用key,程序里生成sign签名时,要用到这个key。为md5 32位格式的字符串。

2 eclipse里windows ->Preferences->Android->Build.设置keystore文件,不要用默认的,要用你正式生成的项目的签名keystore,测试也可以用微信demo里的debug.keystore文件(最终还是要用自己发布用的)。附赠截图一张:

3 、使用微信提供的  签名提取工具,提取你的apk签名,到微信开放平台里的开发信息】设置一下此产品签名: 如上图,我特意标出md5那个东东,其实最终提取出来的,就是去掉冒号的字符串。

点击下载微信签名提取工具   (微信开放平台->资源中心->资源下载->android资源下载->签名工具)


4 、 WXPayEntryActivity.java这个类,一定要在.wxapi包下。如你的项目包名叫做 com.a.b   那么此文件路径是 com.a.b.wxapi.WXPayEntryActivity.java.


5、个人建议(不改行不行我也不确定),测试时,测试demo包名要改成你的包名(例如上边的com.a.b),这点是在其他攻略里查的,据说微信验证会对应包名和签名,不正确,则支付不会通过。反正。。我是不管三七二十一,直接demo包名,换成我的包名,再进行测试的。


6 、微信客户端本身,进行app支付时,貌似有缓存机制。如果一再支付错误,报errcode-1,请清理微信数据,重启微信。我这边有遇到代码调好,死活就报错,最后清理微信数据,重启微信,支付界面成功调出。



归纳下微信app支付的流程和填的坑。流程如下:

微信支付官方文档链接

官方基本只看api部分的步骤即可。

1、整理必备参数(官方文档里,【api列表】->【统一下单】,我只用了必填参数),按照微信要求规则签名(签名规则链接)后,把参数post至 https://api.mch.weixin.qq.com/pay/unifiedorder 接口。此步骤前端处理也可,后端处理也可。我是放在后端处理的,微信的demo就是如此做的,理由是,避免商户号等信息暴露。

post以后,微信接口会返回一个xml,结构如下:

此处有神坑一枚:返回值里,只有prepay_id,这一个值用得到~~~重复:只有只有prepay_id,这一个值用得到。其他都是浮云。


2、将appid(产品id ,wx开头的,取自微信开放平台,微信支付文档里,写的是公众账号id,鄙视一下),

partnerid(商户号,取自微信商户平台),

prepayid(预支付交易会话ID,即步骤1里的prepay_id),

package(固定填写Sign=WXPay),

noncestr(随机字符串,此处又有神坑一枚:要用你第一次post时,自己生成的nonce_str的值,而不是返回的xml里的nonce_str

timestamp(10位的时间戳,记住,是10位的)

以上6个参数,配合公用key,再次按照微信签名规则,进行签名,生成sign后  ,将此7个值(以上6值+sign) 返回给前端,demo里使用的是json格式返回

app前端  使用PayReq对象的属性值,接收上边7个值后, 由 微信支付实例对象 执行sendReq函数。

支付成功回调在WXPayEntryActivity.java里的onResp函数里。


完工,以上趟中任意一个坑,都不会正确弹出支付,errcode 会一直-1。。

大概如此,还有疑惑的朋友,可以给我留言,或者发站内信。


1 0
原创粉丝点击