Unity接入第三方Android SDK——之微信支付

2,272 阅读2分钟

Unity接入微信支付之前,首先需要解决接入微信SDK的问题,这部分这篇文章我这就不细说了,具体可以看我之前写这篇文章:Unity接入第三方Android SDK——之微信分享 , 但是先把这篇文章看完再回头去看微信分享那篇文章,这样流程就顺下来了。

  1. Android Library的包名前半部分要和Unity的包名一致, 比如Unity的包名是com.aaa.bbb, 那么Android Library的包名可以设置为 com.aaa.bbb.ccc。

  2. 关于支付回调,微信要求必须是在com.aaa.bbb.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调),在WXPayEntryActivity类中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数。

    创建 com.aaa.bbb.wxapi 路径的流程: Android Stuido中默认是这样的: image.png 先取消勾选Campact Middle Packages image.png 之后就变成这样了 image.png 再在 bbb 上新建一个 Package,命名为wxapi即可 image.png

  3. 记得在Library的 AndroidManifest.xml的中加入以下内容

<activity android:name="com.titianai.hanzi.wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"></activity>

其中 android:exported="true" 很重要,一定要加,否则收不到回调,设为true, 表明该Activity支持跨进程,从而微信端可以与APP端进行通信。 **

  1. 剩下的就是WXPayEntryActivity的实现了,这部分只要参照微信SDK的源码做就好了,不要做大的修改,下面可以贴出我的运行成功的代码,不一定是最简洁的,好在最终功能实现正常:
package com.aaa.bbb.wxapi;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.titianai.hanzi.wechat.MainActivity;
import com.titianai.hanzi.wechat.WeChatController;

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
    private IWXAPI api;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.pay_result);

        api = WXAPIFactory.createWXAPI(this, appid);// 这个appid请根据自己的项目实际进行填充
        api.handleIntent(getIntent(), this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        api.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq req) {
    }

    @Override
    public void onResp(BaseResp resp) {
        int result = 0;
        if (resp.getType()== ConstantsAPI.COMMAND_PAY_BY_WX){
            if (resp.errCode==0){
                Toast.makeText(this,"支付成功",Toast.LENGTH_LONG).show();
            }else if (resp.errCode==-2){
                Toast.makeText(this,"取消支付",Toast.LENGTH_LONG).show();
            }else {
                Toast.makeText(this,"支付失败",Toast.LENGTH_LONG).show();
            }
            // 得到微信支付的回调结果后自定义的操作,请根据自身项目实现
            MainActivity.WXPayResult(resp.errCode);
            finish();
        }
    }

}