Android中微信支付的流程(从请求统一支付接口到真正调起微信支付)

本文详细记录了在Android应用中集成微信支付的过程,包括申请微信开发者账号、获取appid和appsecret、请求统一支付接口、处理签名问题以及解决可能出现的闪退现象。遇到的主要挑战是后台接口问题和二次签名,通过查阅官方文档和实践,最终成功实现微信支付功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在公司做一款电商类的软件,接入支付是必不可少的环节。继上一次集成支付宝以后,微信支付又开启了另一段痛苦的历程。由于以前没有做过微信支付,所以这次在做的过程中还是遇到很大的问题。而且,公司目前没有自己的后台,所有的接口都是外包来承接的,在遇到问题时,外包一般会说,这是封装好的,以前都没有问题。然后,你只能自己查找原因,废话不多说,简单记录一下集成微信的整个过程。

1.微信支付的签名问题(包括微信的分享)

  虽然关于微信的签名是个老生常谈的问题了,但是在这里我还是想要简单的描述一下.首先,要得到一个签名,你得先有一个自己的应用(Android版).这就需要你到微信的开放平台上申请一个帐号,然后认证你的开发资质(这一步是不是必须我不太清楚),最后创建一个应用,进行应用的审核(这里需要填写你的应用包名和签名,当然这个后期也是可以修改的.这里的签名你可以在androidstudio上先对你的module进行签名,然后可以在微信的网站上下一个查看签名的工具,安装到手机上,输入你应用的包名,就可以查看你应用的签名了.查看签名工具的下载地址:
https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk).审核通过以后,你就可以拿到你的appid和你的appsecreat(应该是通过以后,当然也可能不是).然后,你就需要申请开通app支付的功能,这期间就需要你作为一个商户之类的一些认证啊之类的东西,都是比较繁琐的.这些完成以后,就可以准备进行支付了.

2.导入微信支付的sdk
  参照这里: http://www.jianshu.com/p/c97639279d2e

3.关于微信支付的请求统一接口以及二次签名
  在完成上述的步骤以后,发现在调起微信支付的时候,还是会出现闪退的情况.于是就猜测会不会是后台返回给我的参数有问题,在这里跟后台核实了appid,partnerid,appsecret等参数.最后无果,还是在后台的一句以前都没有问题下无疾而终.所以在这种情况下,只能自己向微信去请求数据来得到自己需要的数据了(其实我是不想这么做的,因为以前没有接触过微信支付,但是在远程后台懒得管的情况下,只能自己去验证了).
  首先,还是查阅了微信的官方文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
  我承认,虽然我也看了几遍文档,可是对于怎么去完成请求还是不太理解.于是通过查阅网上各种信息,现总结如下:
  
3.1 准备工作
  在你请求微信的统一支付的接口时,有几个参数是必须的,微信的文档上已经罗列出来.
  (1) appid 应用的id 例如:wxd678efh567hg6787
  (2) mch_id 商户的id 例如:1230000109 (申请开通支付功能关联的商户的id)
  (3) nonce_str 随机字符串 例如:5K8264ILTKCH16CQ2502SI8ZNMTM67VS
  生成随机字符串你需要写一个方法,例如:

//一个10000以内的随机整数,并进行MD5加密
private String getNonce_str() {
    return MD5Utils.getMd5(new Random().nextInt(10000) + "");
}

  (4) body 商品描述 例如:”ceshishangpin”(不确定这里是不是涉及到转码的问题,所以用的是字母)
  (5) out_trade_no 订单号 例如:20150806125346(自家平台生成的订单号)
  (7) spbill_create_ip 终端ip 例如:123.12.12.123 (生成订单时设备的ip地址,我测试用的本机ip)
  (8) notify_url 通知地址 例如:http://www.weixin.qq.com/wxpay/pay.php(这个地址还是要后台给你的,测试的话随便填也行吧应该,可以试试,不能包含特殊字符)
  (9) trady_type 交易类型 例如:APP
  (10) sign 签名 例如:C380BEC2BFD727A4B6845133519F3AD6 (这是微信的第一次签名,在这里你又需要写到一个方法了,MD5Utils中是用的UTF-8的编码方式,请自行准备这个工具类)

    public  String createSign(SortedMap<Object, Object> parameters) {
    StringBuffer sb = new StringBuffer();
    Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序(升序)
    Iterator it = es.iterator();
    while (it.hasNext()) {
        Map.Entry entry = (Map.Entry) it.next();
        String k = (String) entry.getKey();
        Object v = entry.getValue();
        if (null != v && !"".equals(v) && !"sign".equals(k) && !
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值