美文网首页Cocos Creatorcocos 2dxCocos开发
Cocos2dx-lua项目中集成微信支付和微信登录遇到的坑!!

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

作者: 行业碧油鸡 | 来源:发表于2017-12-12 16:31 被阅读313次

    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,微信登录后黑屏闪屏问题

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/npklixtx.html