美文网首页
2018-04-09 Android微信支付踩坑记录

2018-04-09 Android微信支付踩坑记录

作者: 肉某人 | 来源:发表于2018-04-09 10:54 被阅读0次

集成流程(AS)

  • 添加依赖
    implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
  • 添加回调类(WXPayEntryActivity),实现IWXAPIEventHandler接口并重写onNewIntent方法
    具体代码如下:
class WXPayEntryActivity : BaseActivity(), IWXAPIEventHandler {

    private lateinit var api: IWXAPI

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //注册API
        api = WXAPIFactory.createWXAPI(this, PayUtil.WX_APP_ID)
        api.registerApp(PayUtil.WX_APP_ID)
        api.handleIntent(intent, this)
    }

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        setIntent(intent)
        api.handleIntent(intent, this)
    }

    override fun onResp(p0: BaseResp?) {
        if (p0?.type == ConstantsAPI.COMMAND_PAY_BY_WX) {
            if (p0.errCode == 0) {
                //成功处理
            } else {
                //失败处理
            }
            finish()
        }

    }

    override fun onReq(p0: BaseReq?) {

    }
  • 从demo中拷入AppRegister
public class AppRegister extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        final IWXAPI api = WXAPIFactory.createWXAPI(context, null);
        api.registerApp(PayUtil.WX_APP_ID);
    }
}
  • AndroidManifest.xml中注册AppRegisterWXPayEntryActivity
<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:launchMode="singleTask"
    android:exported="true"
    android:screenOrientation="portrait" />

<receiver
    android:name=".receiver.AppRegister"
    android:permission="com.tencent.mm.plugin.permission.SEND" >
        <intent-filter>
            <action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />
        </intent-filter>
</receiver>
  • 调用支付代码(PaySign为后台获取的数据类)
        val api = WXAPIFactory.createWXAPI(context, null, true)
        api.registerApp(WX_APP_ID)
        val request = PayReq()
        request.apply {
            appId = WX_APP_ID
            partnerId = WX_PARTNER_ID
            prepayId = paySign.prepayid
            packageValue = paySign.packageValue
            nonceStr = paySign.nonceStr
            timeStamp = paySign.timestamp
            sign = paySign.sign
        }

        val checkArgs = request.checkArgs()
        val sendReq = api.sendReq(request)

        Log.e("PayUtil", "checkArgs$checkArgs")
        Log.e("PayUtil", "sendReq$sendReq")

踩坑记录

  • 坑1
    WXPayEntryActivity必须处于包名+wxapi路径下,如com.example.hello.wxapi.WXPayEntryActivity
  • 坑2(这个也不算坑 需要注意一下)
    在微信开放平台填的包名和签名必须和当前测试的环境一致
    不打包直接run用的as默认签名文件(keystore),打包之后安装用的是你自己的签名文件, 然后根据开放平台的生成规则生成对应的签名填入即可
  • 坑3
    AndroidManifest.xml中,WXPayEntryActivity一定要加上exported="true",否则该类不会被微信调用
  • 坑4
    在回调入口onResp方法中,BaseResperrStr属性极大可能为空,其他的值也有可能,如果你直接取出来用的话,大概率的会报错,而且这个问题极易被忽视

总结

做什么都需要细心点,暂时就发现这几个问题,和支付宝比起来确实不少 =。=
如果能帮到大家肯定是最好的啦~

相关文章

网友评论

      本文标题:2018-04-09 Android微信支付踩坑记录

      本文链接:https://www.haomeiwen.com/subject/vvvbhftx.html