接入安卓微信支付笔记

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


官方文档




首先先去册开放平台帐号,认证开发者资质。目前是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------------------------


CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b或2023b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪(CEEMDAN)、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 1. EMD(经验模态分解,Empirical Mode Decomposition) 2. TVF-EMD(时变滤波的经验模态分解,Time-Varying Filtered Empirical Mode Decomposition) 3. EEMD(集成经验模态分解,Ensemble Empirical Mode Decomposition) 4. VMD(变分模态分解,Variational Mode Decomposition) 5. CEEMDAN(完全自适应噪声集合经验模态分解,Complementary Ensemble Empirical Mode Decomposition with Adaptive Noise) 6. LMD(局部均值分解,Local Mean Decomposition) 7. RLMD(鲁棒局部均值分解, Robust Local Mean Decomposition) 8. ITD(固有时间尺度分解,Intrinsic Time Decomposition) 9. SVMD(逐次变分模态分解,Sequential Variational Mode Decomposition) 10. ICEEMDAN(改进的完全自适应噪声集合经验模态分解,Improved Complementary Ensemble Empirical Mode Decomposition with Adaptive Noise) 11. FMD(特征模式分解,Feature Mode Decomposition) 12. REMD(鲁棒经验模态分解,Robust Empirical Mode Decomposition) 13. SGMD(辛几何模态分解,Spectral-Grouping-based Mode Decomposition) 14. RLMD(鲁棒局部均值分解,Robust Intrinsic Time Decomposition) 15. ESMD(极点对称模态分解, extreme-point symmetric mode decomposition) 16. CEEMD(互补集合经验模态分解,Complementary Ensemble Empirical Mode Decomposition) 17. SSA(奇异谱分析,Singular Spectrum Analysis) 18. SWD(群分解,Swarm Decomposition) 19. RPSEMD(再生相移正弦辅助经验模态分解,Regenerated Phase-shifted Sinusoids assisted Empirical Mode Decomposition) 20. EWT(经验小波变换,Empirical Wavelet Transform) 21. DWT(离散小波变换,Discraete wavelet transform) 22. TDD(时域分解,Time Domain Decomposition) 23. MODWT(最大重叠离散小波变换,Maximal Overlap Discrete Wavelet Transform) 24. MEMD(多元经验模态分解,Multivariate Empirical Mode Decomposition) 25. MVMD(多元变分模态分解,Multivariate Variational Mode Decomposition)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值