Cocos Creator 接入安卓 android & iOS 原生微信支付
在看这篇操作前请先阅读我的关于微信登录分享接入的文章
http://forum.cocos.com/t/cocoscreator-sdk-js-java/62480
http://forum.cocos.com/t/cocos-creator-ios-sdk/62481
注:支付需要的相关参数均为服务器返回。如何产生支付需要的参数可阅读官方文档。
安卓端
第一步 build.gradle中引入微信sdk
implementation ‘com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+’
第二步 build.gradle中添加真机测试签名证书
signingConfigs {
release {
storeFile file("../app/src/milkrelease")
storePassword “pwdkskll!l13@“
keyAlias "milk"
keyPassword "pwdkskll!l13@"
}
debug {
storeFile file("../app/src/milkrelease")
storePassword "pwdkskll!l13@"
keyAlias "milk"
keyPassword "pwdkskll!l13@"
}
}
第三步 在wxapi包下 新建WXPayEntryActivity.java 文件 实现回调. 直接复制官方案例代码。
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private static final String TAG = "WXPayEntryActivity";
private IWXAPI api;
private static final String APP_ID = "wxeb2a833c5c9sdfe23";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, WXPayEntryActivity.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) {
}
@Override
public void onResp(BaseResp baseResp) {
Log.e("xxoo:", "onResp: " + baseResp.errCode);
PlatformSystem.onWXPayCallback(baseResp.errCode);
finish();
}
}
第四步 androidManifest.xml中添加
第五步 在PlatformSystem中添加与JS交互相关代码
// JS调JAVA微信支付
public static void wechatPayWithParams(String appId, String partnerId, String prepayId, String nonceStr, String packageValue,String timeStamp, String sign){
PayReq req = new PayReq();
req.appId = appId;
req.partnerId = partnerId;
req.prepayId = prepayId;
req.nonceStr = nonceStr;
req.timeStamp = timeStamp;
req.packageValue = packageValue;
req.sign = sign;
final IWXAPI api = WXAPIFactory.createWXAPI(PlatformSystem.getContext(), appId);
api.registerApp(appId);
api.sendReq(req);
}
// 支付回调JS
public static void onWXPayCallback(final int errCode){
// 一定要在GL线程中执行
((Cocos2dxActivity)Cocos2dxActivity.getContext()).runOnGLThread(new Runnable() {
@Override
public void run() {
Log.e( “onWXPayCallback”,“我来了,大宝贝”);
Cocos2dxJavascriptJavaBridge.evalString(“cc.native.wechatPayCallBack && cc.native.wechatPayCallBack(’” + errCode + "’) ");
// Cocos2dxJavascriptJavaBridge.evalString(“cc.native.wechatPayCallBack && cc.native.wechatPayCallBack(” + 1 + "’) ");
}
});
}
Native.js中添加
native.wechatPay = function (appid,partnerID,prepayID,packagestr,noncestr,timestamp,sign, callback) {
native.wechatPayCallBack = callback;
if (cc.sys.platform == cc.sys.ANDROID) {
return jsb.reflection.callStaticMethod("com/xuankai6/groupgame/platformSystem/PlatformSystem", "wechatPayWithParams", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", appid,partnerID,prepayID, noncestr,packagestr,timestamp,sign);
} else if (cc.sys.os == cc.sys.OS_IOS) {
return jsb.reflection.callStaticMethod("PlatformSystem", "wechatPayWithPartnerID:prepayID:package:noncestr:timestamp:sign:appid:", partnerID,prepayID,packagestr, noncestr,timestamp,sign,appid);
}
}
iOS端有了微信登录分享再弄支付就比较容易,不写在这里,见官方文档就好。谈谈我遇见的坑:
- 划重点 需要安装带支付功能的sdk,有可能在做登录分享操作的时候下载了无支付功能的sdk。
- 时间戳的转换 不要转换错了String to unit32
UInt32 num;
sscanf([timestamp UTF8String], “%u”, &num);
或者
[timestamp intValue]
最后谈谈微信支付回调
0 成功。无话可说。
-1 失败。当前你sendReq的时候,屏幕一闪而过,返回-1,要么你没设置xml,要么你的订单信息出问题了。appid 商户号 api安全码 时间戳 == 都有可能导致这个问题。你可能因为用了假的没有支付功能的SDK而烦恼一个下午。因为这是-1. 没有提示.
-2 取消。
交流:
