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

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

  1. 記得在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();
        }
    }

}


作者:JookiTsui
鏈接:https://juejin.cn/post/6896334739997720583
來源:掘金
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章