Cocos Creator 接入安卓 android & iOS 原生微信支付

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端有了微信登录分享再弄支付就比较容易,不写在这里,见官方文档就好。谈谈我遇见的坑:

  1. 划重点 需要安装带支付功能的sdk,有可能在做登录分享操作的时候下载了无支付功能的sdk。
  2. 时间戳的转换 不要转换错了String to unit32
    UInt32 num;
    sscanf([timestamp UTF8String], “%u”, &num);
    或者
    [timestamp intValue]

最后谈谈微信支付回调
0 成功。无话可说。
-1 失败。当前你sendReq的时候,屏幕一闪而过,返回-1,要么你没设置xml,要么你的订单信息出问题了。appid 商户号 api安全码 时间戳 == 都有可能导致这个问题。你可能因为用了假的没有支付功能的SDK而烦恼一个下午。因为这是-1. 没有提示.
-2 取消。

交流:

4赞

顶顶顶

感谢老哥的帖子 让我少走很多弯路

mark

mark

anysdk要关停了,看样子就只有接入原生SDK了。

没听说过啊

http://www.anysdk.com/2019/05/2203

没问题,接入第三方原生按文档走就没问题。没必要用第四方的。

好东西