继之前的文章Unity头像上传功能实现 一 , 将Unity与安卓交互的功能整合了一下,接入了微信支付/登录,支付宝支付
GitHub地址: https://github.com/alexchenc/unityplugins
微信支付/登录
-
接入微信的功能,需要先到微信开放平台申请一个应用,拿到AppID和AppSecret,并且已获得微信支付和微信登录的权限
-
获取微信支付的权限之后,会收到一封邮件里面包含商户号,进入商户平台获取商户ID(微信支付需要)
-
具体申请步骤就不说了,需要一大堆资料,而且貌似只面向企业用户了。
-
要注意的是这里的应用签名应设置为Unity项目中的签名,包名也需要和Unity项目中包名一致(Android项目中也相同)
下面就以已拿到AppID和APPSecret和商户ID为基础进行开发
- 查看微信开发文档,引入微信API:(https://bintray.com/wechat-sdk-team/maven)
Android Studio环境、Idea环境下,在build.gradle文件中,添加如下依赖即可:
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
或
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
-
下载微信官方Demo
将以下两个文件包括文件夹拷贝到我们项目中,对应相应的位置:
-
我们的主入口在MainActivity.java中,Unity传递消息我们用这个类来接收
其中调用微信支付和登录的方法为:
/**
* 调用微信API
*/
public void openWechatPay(String orderStr) {
WechatService.GetInstance().openWechatPay(orderStr);
}
/**
* 调用微信登录
*/
public void openWechatLogin() {
WechatService.GetInstance().openWechatLogin();
}
- 拷贝到项目中的两个类
WXEntryActivity
和WXPayEntryActivity
用于处理微信界面的返回结果
package com.cclovers.demo.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import com.cclovers.demo.WechatService;
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;
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
// IWXAPI 是第三方app和微信通信的openapi接口
private IWXAPI api;
private WechatService wechatService = WechatService.GetInstance();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this, WechatService.APP_ID, false);
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) {
switch (req.getType()) {
case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
break;
case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
break;
case ConstantsAPI.COMMAND_LAUNCH_BY_WX:
break;
default:
break;
}
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp resp) {
switch (resp.getType()) {
case ConstantsAPI.COMMAND_LAUNCH_BY_WX:
break;
case ConstantsAPI.COMMAND_SENDAUTH:
wechatService.onSendAuthResp(resp);
break;
default:
break;
}
finish();
}
}
package com.cclovers.demo.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import com.cclovers.demo.WechatService;
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;
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";
private IWXAPI api;
private WechatService wechatService = WechatService.GetInstance();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.pay_result);
api = WXAPIFactory.createWXAPI(this, WechatService.APP_ID);
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) {
switch (resp.getType()) {
case ConstantsAPI.COMMAND_PAY_BY_WX:
wechatService.onSendPayResp(resp);
break;
default:
break;
}
finish()