Unity接入微信支付之前,首先需要解决接入微信SDK的问题,这部分这篇文章我这就不细说了,具体可以看我之前写这篇文章:Unity接入第三方Android SDK——之微信分享 , 但是先把这篇文章看完再回头去看微信分享那篇文章,这样流程就顺下来了。
-
Android Library的包名前半部分要和Unity的包名一致, 比如Unity的包名是com.aaa.bbb, 那么Android Library的包名可以设置为 com.aaa.bbb.ccc。
-
关于支付回调,微信要求必须是在com.aaa.bbb.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调),在WXPayEntryActivity类中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数。
创建 com.aaa.bbb.wxapi 路径的流程: Android Stuido中默认是这样的:
先取消勾选Campact Middle Packages 之后就变成这样了 再在 bbb 上新建一个 Package,命名为wxapi即可
- 记得在Library的 AndroidManifest.xml的中加入以下内容
<activity android:name="com.titianai.hanzi.wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"></activity>
复制代码
其中 android:exported="true" 很重要,一定要加,否则收不到回调,设为true, 表明该Activity支持跨进程,从而微信端可以与APP端进行通信。 **
- 剩下的就是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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
来源:oschina
链接:https://my.oschina.net/u/4356138/blog/4942874