Cocos2dx-lua项目中集成微信支付和微信登录遇到的坑!!!

1,写c++调用方法

通过JNI获取java虚拟机,再获取当前程序的JNI环境,通过JNI环境获取需要调用的java类信息,再获取需要调用的java类中的函数信息。再通过JNI环境调用,使用类信息、函数信息,调用对应的java函数。

#include "cocos2d.h"
#include "config.h"

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "platform/android/jni/JniHelper.h"

记得引用JniHelper.h时,加上#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID),不然iOS版本会报错。

需要使用的接口如下:

static bool getStaticMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode);
static bool getMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode);

例如我的方法:

.h 中声明
static void Pay_WXPay(const char *partnerid,const char *prepayid,const char *package,const char *noncestr,const char *timestamp,const char *sign);
.cpp中实现
void CMiscHelper::Pay_WXPay(const char *partnerid,const char *prepayid,const char *package,const char *noncestr,const char *timestamp,const char *sign)
{
    JniMethodInfo t;
    if(JniHelper::getStaticMethodInfo(t, (string(CLASS_NAME)+string("MiscHelper")).c_str(), "Pay_WXPay", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljav  a/lang/String;Ljava/lang/String;)V"))
        {
        jstring jpartnerid =  t.env->NewStringUTF(partnerid);
        jstring jprepayid =  t.env->NewStringUTF(prepayid);
        jstring jpackage =  t.env->NewStringUTF(package);
        jstring jnoncestr =  t.env->NewStringUTF(noncestr);
        jstring jtimestamp =  t.env->NewStringUTF(timestamp);
        jstring jsign =  t.env->NewStringUTF(sign);
        t.env->CallStaticVoidMethod(t.classID, t.methodID, jpartnerid,jprepayid,jpackage,jnoncestr,jtimestamp,jsign);
        t.env->DeleteLocalRef(jpartnerid);
        t.env->DeleteLocalRef(jprepayid);
        t.env->DeleteLocalRef(jpackage);
        t.env->DeleteLocalRef(jnoncestr);
        t.env->DeleteLocalRef(jtimestamp);
        t.env->DeleteLocalRef(jsign);
        t.env->DeleteLocalRef(t.classID);
        }
        }

类型中 Ljava/lang/String;分号一定要加上!!!

然后/tools/tolua/xxx python genbindings_xxx.py
绑定后自动生成文件默认在auto中,lua_jni_auto.cpp文件中如果没有添加安卓判断记得添加:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
否则会报错!!!

2,写java原生方法

1.应用中的包名(Mainfext.xml中的package)必须与后台配置的一致。
2.应用生成不能是debug包,必须是正式的签名包。这个签名必须与后台配置的一致,release包才能支付成功。
3.微信的方法编写是有约束的,你的项目包名是com.aaa.xxx,那么你就要在src下面先新建一个com.aaa.xxx.wxapi的包,微信登录在这个包下面创建一个WXEntryAvtivity的类;微信支付在这个包下面创建一个WXPayEntryAvtivity的类。

3,微信登录后黑屏闪屏问题

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容