【避坑指南】在安卓APP接入微信支付

  1. 微信支付涉及到两个平台,一个是微信开放平台,另一个是微信支付商户平台,需要在微信开放平台上创建应用,然后关联微信支付商户平台的商户号
  2. 微信支付只用到AppID和API密钥(微信商户平台(pay.weixin.qq.com)–>账户中心–>账户设置–>API安全–>设置API密钥),没有用到AppSecret
  3. 微信支付有两个过程,一个是发起预支付(即"统一下单",详见https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1),另一个是正式支付(即"调起支付接口",详见https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_12&index=2),只有先发起预支付才能拿到prepayId,而且通过Post到https://api.mch.weixin.qq.com/pay/unifiedorder时报文需要是xml格式,预支付的结果也是通过xml回传;
  4. 预支付的签名算法要和正式支付的签名算法一致,详见https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3#,里面有个签名校验工具,可以看看自己计算出来的签名是否一致;
  5. 预支付订单的传参中有个package="Sign=WXPay"的项,注意字符串分割时"Sign=WXPay"不要也被分割开了
  6. 运行报错 “ClassNotFoundException: com.tencent.xweb.pinus.sdk.JNIUtils” 但是检查过appId和签名都没问题,那就尝试一下在AndroidManifest中添加如下代码:
  <!--包体可见性-->
  <queries>
    <package android:name="com.tencent.mm" />
  </queries>
  1. 支付前弹出提示“签名不对,请检查签名是否与开放平台上填写的一致”,其实就是打包用到的keystore不对,一定要与微信开放平台上填写的包名和签名一致,如果你keystore不对,那么计算出来的签名也是错误的,在这个链接里可以下载一个apk签名生成工具,输入包名就能得到签名。https://developers.weixin.qq.com/doc/oplatform/Downloads/Android_Resource.html
  2. 横屏APP拉起微信支付的瞬间闪退,logcat日志显示"Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory"啥的,这个我也没找到解决办法,但是把横屏APP改成竖屏APP后,就不会闪退了,并且可以看到其他报错,感觉是因为微信支付是竖屏的,但是支付过程又出现了异常,导致窗体闪退。
  3. 能拉起微信支付,但是弹窗提示“支付验证签名失败”,而且在上述第4步的工具中校验过签名没问题,那很大可能是统一下单和调起支付接口的参数字段名错了!比如二者都有的nonceStr字段,在统一下单叫“nonce_str”,在调起支付叫“noncestr”,非常恶心:
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!要在安卓应用中接入微信支付,您可以按照以下步骤进行操作: 1. 在微信开放平台上注册并创建一个应用,获取到对应的AppID和AppSecret。 2. 在安卓应用的项目中,添加微信支付的SDK文件,可以通过在项目的build.gradle文件中添加相应的依赖来引入。 3. 在安卓应用的manifest文件中,添加以下权限和activity声明: ```xml <uses-permission android:name="android.permission.INTERNET" /> <activity android:name="com.tencent.mm.opensdk.openapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> ``` 4. 在安卓应用的代码中,使用微信支付SDK提供的API进行支付操作。具体步骤如下: - 在您的支付页面或订单确认页面,用户点击支付按钮后,调用以下代码创建一个支付请求: ```java PayReq req = new PayReq(); req.appId = "您的AppID"; req.partnerId = "商户号"; req.prepayId = "预支付交易会话ID"; req.packageValue = "扩展字段(暂填写固定值:Sign=WXPay)"; req.nonceStr = "随机字符串"; req.timeStamp = "时间戳"; req.sign = "签名"; // 发送支付请求 IWXAPI api = WXAPIFactory.createWXAPI(context, req.appId); api.registerApp(req.appId); api.sendReq(req); ``` - 在安卓应用的代码中,实现一个WXPayEntryActivity来接收支付结果的回调。在该Activity的`onCreate`方法中,调用以下代码处理支付结果: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wxpay_entry); // 处理支付结果 handlePayResult(getIntent()); } private void handlePayResult(Intent intent) { // 获取支付结果信息 PayResp resp = new PayResp(); resp.fromIntent(intent); // 根据支付结果进行相应处理 if (resp.errCode == BaseResp.ErrCode.ERR_OK) { // 支付成功 // TODO: 进行支付成功后的逻辑处理 } else { // 支付失败 // TODO: 进行支付失败后的逻辑处理 } finish(); } ``` 以上是接入微信支付的基本步骤,您需要根据具体的业务需求和微信支付提供的文档进行相应的配置和开发。希望对您有所帮助!如果还有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值