总结实现微信支付所遇到的坑

上星期给公司的APP增加了一个微信支付的功能(怒草微信,别人家功能都很轻松添加,咋就你家的这么磨叽呢?),感觉就是个没啥技术含量,但是特别繁琐的东西,故在此记录以供日后查阅,


首先需要在微信开放平台申请使用相应支付接口时需要使用到的appid、appsecret(长度为32 的字符串,用于获取 access_token)、appkey(长度为 128 的字符串,用于支付过程中生成 app_signature)及 partnerkey(微信公众平台商户模块生成的商户密钥),具体申请过程不累述,需要注意的是:申请相应key应该使用你的app包名以及打包时所使用keystore的签名,不然无法调起微信。这个keystore的签名可以在打包时看到,微信开放平台亦有相关获取应用签名的工具。


文档建议appkey、appsecret、partnerkey不宜写在app端,那么需要用时就一股脑全都从服务器获取吧(为了安全,这里与服务器的通信数据做加密处理),

拿到以上几个key以后,调用接口获取access_token,看看文档即可知道如何获取,比较简单。之后根据获取的access_token加上PostData中格式为json的订单详细数据生成预支付订单,微信服务端返回prepayid,PoatData中,注意根据文档所述传入正确的键值,其中package以及app_signature这两个字段要仔细些传入,package字段中传入的值要注意在拼接的时候需要按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的格式(即 key1=value1&key2=value2…)拼接成字符串.   app_signature同理亦多加仔细。


最后,使用相应获取的参数调用微信完成支付即可,

req.appId = MainTools.getAppWechatAppId(mContext);<span style="white-space:pre">		</span>//开放平台申请所得appid
req.partnerId = partnerid;<span style="white-space:pre">					</span>//微信公众平台商户模块生成的商户密钥
req.prepayId = prepayid;<span style="white-space:pre">					</span>//使用access_token加上订单详细数据调用接口所得
req.nonceStr = noncestr;<span style="white-space:pre">					</span>//32位内的随机串,防止重发
req.timeStamp = String.valueOf(timestamp);<span style="white-space:pre">			</span>//时间戳,1970 年 1 月 1 日 00:00 到请求发起时间的秒数
req.packageValue = weixinpackage;<span style="white-space:pre">				</span>//"Sign=WXPay"
req.sign = MainTools.getSign(obj,mContext);<span style="white-space:pre">			</span>//app_signature
msgApi.sendReq(req);


以上即为调用微信支付的大概步骤,接收支付返回结果:参照微信 SDK Sample,在 WXPayEntryActivity 类中实现 onResp 函数,处理支付结果的通知和下一步界面操作。

返回结果。resp.errCode  :err.Code == 0       //支付成功

  err.Code == -1     //支付失败

        err.Code == -2     //取消支付返回


检测是否安装微信以及当前版本的微信是否支持微信支付

if (! msgApi.isWXAppInstalled()) {
							Toast.makeText(mContext, "未安装微信", Toast.LENGTH_LONG).show();
						} else if (!msgApi.isWXAppSupportAPI()) {
							Toast.makeText(mContext, "当前版本微信不支持支付功能", Toast.LENGTH_LONG).show();
						} 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值