Android 微信支付详解及总结

       几乎每一个Android项目中都会涉及到购买及支付,如微信支付,支付宝支付等。今天,仅针对微信支付来说,因为微信支付一不小心就会调不起登录和支付等errCode = -1的情况出现,令我们头疼不已。


      微信支付调用流程是这样的:

          1.用户在商户APP中选择商品,提交订单,选择微信支付。

          2.商户后台收到用户支付单,调用微信支付统一下单接口。

          3.统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。

          4.商户APP调起微信支付。

          5.商户后台接收支付通知。

          6.商户后台查询支付结果。


       首先,在调起微信支付之前,先在微信开放平台申请APPId(应用Id),mchId(商品号),appkey(密钥),其中Android需要包名和应用签名的。(应用签名的获取:release或debug数字签名证书的MD5签名值--在所在证书目录下执行命令  keytool -list -v -keystore "证书名"     即可获得MD5值。)

      然后,是导入微信支付sdk的jar包。

      接着是,需要先调用统一下单接口:

其中,接口链接:https://api.mch.weixin.qq.com/pay/unifiedorder

请求参数:

字段名变量名类型必填示例值描述
应用IDappidstringwxd678efh567hg6787微信开放平台审核通过的应用APPID
商户号mch_idstring1230000109微信支付分配的商户号
商品详情detailstring  
随机字符串nonce_strstring5K8264ILTKCH16CQ2502SI8ZNMTM67VS随机字符串,不长于32位(参考微信开放平台)
签名signstringC380BEC2BFD727A4B6845133519F3AD6签名
商品描述bodystring商品充值/支付商品描述
商户订单号out_trade_nostring 商户系统内部的订单号,32个字符内、可包含字母
总金额total_feeint 支付总金额,单位为分,参数不能带小数
终端IPspbill_create_ipstring 用户端实际ip
通知回调地址notify_urlstring 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数
交易类型trade_typestringAPP支付类型

返回结果,判断return_code值是否为SUCEESS/FIAL。

若FAIL则查看return_msg错误原因。

若SUCCESS,

示例如下:

<xml>
   <return_code><![CDATA[SUCCESS]]></return_code>
   <return_msg><![CDATA[OK]]></return_msg>
   <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
   <mch_id><![CDATA[10000100]]></mch_id>
   <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
   <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
   <result_code><![CDATA[SUCCESS]]></result_code>
   <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
   <trade_type><![CDATA[APP]]></trade_type>
</xml>

调用支付,其请求参数:

字段名变量名类型必填描述
应用IDappidstring微信开放平台审核通过的应用APPID
商户号partneridstring微信支付分配的商户号
预支付交易会话IDprepayidstring微信返回的支付交易会话ID
扩展字段packagestring 
随机字符串noncestrstring随机字符串
时间戳timeStampstring时间戳
签名signstring签名
此时返回支付结果,

注意!!这里必须要有wxapi这个包名,同时必须有WXPayEntryActivity这个类名,否则无法调起微信支付。在WXPayEntryActivity类中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。返回值,参考微信开放平台文档。

还有一点!!调不起微信,很可能的原因就是Sign签名有错!!



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值