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

请求参数:

字段名 变量名 类型 必填 示例值 描述
应用ID appid string wxd678efh567hg6787 微信开放平台审核通过的应用APPID
商户号 mch_id string 1230000109 微信支付分配的商户号
商品详情 detail string    
随机字符串 nonce_str string 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 随机字符串,不长于32位(参考微信开放平台)
签名 sign string C380BEC2BFD727A4B6845133519F3AD6 签名
商品描述 body string 商品充值/支付 商品描述
商户订单号 out_trade_no string   商户系统内部的订单号,32个字符内、可包含字母
总金额 total_fee int   支付总金额,单位为分,参数不能带小数
终端IP spbill_create_ip string   用户端实际ip
通知回调地址 notify_url string   接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数
交易类型 trade_type string APP 支付类型

返回结果,判断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>

调用支付,其请求参数:

字段名 变量名 类型 必填 描述
应用ID appid string 微信开放平台审核通过的应用APPID
商户号 partnerid string 微信支付分配的商户号
预支付交易会话ID prepayid string 微信返回的支付交易会话ID
扩展字段 package string  
随机字符串 noncestr string 随机字符串
时间戳 timeStamp string 时间戳
签名 sign string 签名
此时返回支付结果,

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

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



猜你喜欢

转载自blog.csdn.net/duanmulirui/article/details/52702278
今日推荐