接入安卓微信支付笔记

最近给项目添加微信支付,过程还算顺利,有几个需要注意的地方,特此记录,也方便又需要的童鞋借鉴大笑


官方文档




首先先去册开放平台帐号,认证开发者资质。目前是300元一年~申请成功后会给你发封邮件 ,包含下图的信息


这些事可以交给后台去做~





获得以上信息后 咱们客户端要做的事情其实很简单~只要与公司后台交互既可以了


1.SDK下载地址 首先集成SDK到我们的项目当中


2.将微信支付DEMO里的结果回调页面WXPayEntryActivity,还有广播AppRegister 拷贝到我们的项目当中,别忘了还有回调页面的xml也要记得复制哦~~


这里值得特别注意的是 :你需要在项目根目录新建名字为wxapi的包,将WXPayEntryActivity放在wxapi里,然后别忘记去AndroidManifest.xml注册回调页面 和 广播






3:然后你就可以向你公司后台发起微信支付请求,再请求的activity中  ,别忘记AppId注册到微信


api = WXAPIFactory.createWXAPI(this, Constant.APP_ID);
api.registerApp(Constant.APP_ID);

对了,记得检查下用户手机是否安装了微信,这里微信SDk也提供了方法

if (isWeiChat) {
    if (isWXAppInstalledAndSupported()){
       //do...
    }else {
        ToastUtil.show("您未安装微信");
    }

4.向后台发起微信支付申请时,后台会给你返回预支付订单的参数,其中包括appid,预支付订单id....等等之类的

PayReq req = new PayReq();
//req.appId = "wxf8b4f85f3a794e77";  // 测试用appId
req.appId        = json.getString("appid");
req.partnerId     = json.getString("partnerid");
req.prepayId      = json.getString("prepayid");
req.nonceStr      = json.getString("noncestr");
req.timeStamp     = json.getString("timestamp");
req.packageValue   = json.getString("package");
req.sign         = json.getString("sign");
req.extData          = "app data"; // 可选择
Toast.makeText(PayActivity.this, "正常调起支付", Toast.LENGTH_SHORT).show();
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.sendReq(req);

**:这些参数什么意思,可以去官方开发文档看下,很详细。特别要注意sign参数!这个有点坑。


Sign参数生成规则:

签名生成的通用步骤如下:

第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

特别注意以下重要规则:

  1. ◆ 参数名ASCII码从小到大排序(字典序);
  2. ◆ 如果参数的值为空不参与签名;
  3. ◆ 参数名区分大小写;
  4. ◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
  5. ◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段

第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。


这个有的公司后台会给你做好,但是有的公司是在客户端做的。所以这些参数你需要和后台商量下,最好是全让他做好,该甩的锅就甩。哈哈

要是后台没给你返回  或者说 给你返回错了【务必用官方的签名工具生成然后与你的对比下】


下面这个方法是,客户端生成二次签名Sign的方法:

SortedMap<Object, Object> parameters = new TreeMap<Object, Object>();
parameters.put("appid", payInfoBean.getAppid());
parameters.put("partnerid", payInfoBean.getPartnerid());
parameters.put("prepayid", payInfoBean.getPrepayid());
parameters.put("noncestr", payInfoBean.getNoncestr());
parameters.put("timestamp", payInfoBean.getTimestamp());
parameters.put("package", payInfoBean.getPackageX());
req.sign = WXStringUtils.createSign("UTF-8", parameters);

public static String createSign(String characterEncoding, 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) && !"key".equals(k)) {
            sb.append(k + "=" + v + "&");
        }
    }
    sb.append("key=" + Constant.API_KEY);
    String sign = MD5.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
    return sign;
}

所有参数都OK后 ,将信息塞进去


api.sendReq(req);

5:要想正常调其微信支付,除了所有参数务必正确,注册appid,回调页面正常注册之外,还需要签名打包哦

debug版本是无法发起调起支付的~~~支付的结果会在WxPayEntryActivity中的onResp()方法中




0:成功   -1:失败  -2:取消


不过最好别以这里的结果为准,官方建议~最好是去后台查询具体的支付结果!


----------------------End------------------------


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值