http://blog.csdn.net/xiechyun/article/details/45076311
版本:UnipaySDK_2.0.1_不带账户_三网_2.0.1U2111B0319
中国联通沃商店UniPay支付SDK开发者帮助文档V2.0.1
开发者社区
参考帮助文档
1、将SDK添加到工程
本SDK包,包含如下jar包:
Multimode_UniPay_base.jar(基本jar)
miniapay.jar(电信支付)
alipaysdk.jar(支付宝用)
MobileSecSdk.jar(支付宝用)
utdid4all-1.0.4.jar(支付宝用)
2、将这些包放入工程libs目录
如果您的工程已经包含支付宝的jar包,那就保留最新版本的jar包,将旧的jar包删除。
3、在EclipseAndroid工程,可以参照下面的步骤添加jar包:
1)在“Package Explore”页签中右击你的工程并选择“Properties”;
2)在左侧面板中选择“Java Build Path”;
3)在主窗口中选择“Libraries”页签;
4)点击“Add JARs…”按钮;
5)选择这些jar包
6)点击“OK”完成。
4、拷贝assets目录下的资源到工程的assets目录下(移动支付)
5、拷贝armeabi目录下的so到工程libs/armeabi目录下(电信和移动支付)
6、拷贝res目录下的资源到工程res对应的目录下(电信和移动支付)
7、配置AndroidManifest.xml文件
文件如下:
- <?xmlversion="1.0"encoding="utf-8"?>
- <manifestxmlns:android="http://schemas.android.com/apk/res/android"
- package="你的包名"
- android:versionCode="19"
- android:versionName="1.1.9"
- android:installLocation="preferExternal">
-
- uses-sdkandroid:minSdkVersion="9"/>
- uses-featureandroid:glEsVersion="0x00020000"/>
-
- uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"uses-permissionandroid:name="android.permission.INTERNET"uses-permissionandroid:name="android.permission.SEND_SMS"uses-permissionandroid:name="android.permission.READ_PHONE_STATE"uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"uses-permissionandroid:name="android.permission.DISABLE_KEYGUARD"uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"application
- android:name="你的包名.MyApplication"
- android:allowBackup="true"
- android:label="@string/app_name"
- android:icon="@drawable/icon"
- meta-dataandroid:name="android.app.lib_name"
- android:value="cocos2dcpp"activityandroid:name="com.unicom.dcLoader.welcomeview"
- android:screenOrientation="portrait"
- android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
- android:configChanges="keyboardHidden|screenSize|navigation|orientation"intent-filter>
- actionandroid:name="android.intent.action.MAIN"categoryandroid:name="android.intent.category.LAUNCHER"</meta-dataandroid:name="UNICOM_DIST_ACTIVITY"android:value="org.cocos2dx.cpp.AppActivity"activityactivityandroid:name="org.cocos2dx.cpp.AppActivity"
- android:configChanges="orientation"serviceandroid:name="com.unicom.wostore.unipay.paysecurity.SecurityServiceFramework"actionandroid:name="你的包名.unicom.wostore.unipay.securityserviceframework"servicemeta-dataandroid:name="wostore_billing_otherpay"android:value="false"meta-dataandroid:name="wostore_billing_chinaunicom"android:value="true"meta-dataandroid:name="wostore_billing_chinamobile"android:value="true"meta-dataandroid:name="wostore_billing_chinatele"android:value="true"applicationsupports-screensandroid:anyDensity="true"
- android:smallScreens="true"
- android:normalScreens="true"
- android:largeScreens="true"
- android:xlargeScreens="true"manifest>
注意:你的包名 此处填写你的工程的包名
8、初始化sdk,调用计费接口
注意事项:
初始化接口必须在Application onCreate方法中调用,不可在Activity的onCreate方法中调用。
1)、cocos2dx创建的工程在src下一般只有org.cocos2dx.cpp包,在src下再创建一个包,包名为你的游戏包名,再在此包下创建MyApplication.java文件
内容如下:
copy
package你的包名;
- importandroid.app.ActivityManager;
- importandroid.app.Application;
- importandroid.content.Context;
- importandroid.util.Log;
- importcom.unicom.dcLoader.Utils;
- importcom.unicom.dcLoader.Utils.UnipayPayResultListener;
- publicclassMyApplicationextendsApplication
- {
- @Override
- publicvoidonCreate()
- super.onCreate();
- System.loadLibrary("megjb");
- Utils.getInstances().initSDK(this,newUnipayPayResultListener()
- @Override
- publicvoidPayResult(Stringarg0,intarg1,intarg2,Stringarg3)
- {
- }
- });
- }
2)、org.cocos2dx.cpp包下的AppActivity.java 文件内容如下:
copy
packageorg.cocos2dx.cpp;
- importorg.cocos2dx.lib.Cocos2dxActivity;
- importorg.cocos2dx.lib.Cocos2dxGLSurfaceView;
- importorg.cocos2dx.lib.Cocos2dxHandler;
- importorg.cocos2dx.lib.Cocos2dxHelper;
- importcom.unicom.dcLoader.Utils;
- importcom.unicom.dcLoader.Utils.UnipayPayResultListener;
- importandroid.content.Intent;
- importandroid.os.Bundle;
- importandroid.os.Handler;
- importandroid.os.Message;
- importandroid.widget.Toast;
- publicclassAppActivityextendsCocos2dxActivity
- publicstaticAppActivitypayActivity=null;
- privatestaticStringjIndex="";
- protectedvoidonCreate(BundlesavedInstanceState)
- //TODOAuto-generatedmethodstub
- super.onCreate(savedInstanceState);
- payActivity=this;
- }
- //返回实例
- publicstaticObjectgetInstance()
- if(payActivity==null)
- payActivity=newAppActivity();
- returnpayActivity;
- privateclasspayCallbackimplementsUnipayPayResultListener
- publicvoidPayResult(Stringpaycode,intflag,intflag2,Stringerror)
- //flag为支付回调结果,flag2为回调类型,error为当前结果描述,paycode是完整的支付编码
- switch(flag)
- case1://success
- //此处放置支付请求已提交的相关处理代码
- runNativeCallback("1",jIndex);
- break;
- case2://fail
- runNativeCallback("2",248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> case3://cancel
- runNativeCallback("0",248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> default:
- break;
- publicstaticvoidrunNativeCallback(finalStringstate,finalStringbillingIndex)
- Cocos2dxGLSurfaceView.getInstance().queueEvent(newRunnable()
- publicvoidrun()
- callBack(state,billingIndex);
- });
- //根据返回结果,调用不同的处理交易标志:istate0:取消,1成功,2失败;
- publicnativestaticvoidcallBack(Stringstate,StringbillingIndex);
- //调用jdk的函数付款
- publicvoidjdkPay(StringbillingIndex)
- jIndex=billingIndex;
- StringstrSerial="";
- intiSerial=1;
- iSerial=Integer.parseInt(billingIndex);
- payHandler.sendEmptyMessage(iSerial);
- privateHandlerpayHandler=newHandler()
- publicvoidhandleMessage(android.os.Messagemsg)
- //计费点001~015对应联通的计费代码001~015
- switch(msg.what)
- case1:
- Utils.getInstances().pay(payActivity,"001",newpayCallback());
- case2:
- Utils.getInstances().pay(payActivity,"002",newpayCallback());
- ...//此处省略多个case
- };
- };
- protectedvoidonResume()
- super.onResume();
- Utils.getInstances().onResume(this);
- protectedvoidonPause()
- super.onPause();
- Utils.getInstances().onPause(this);
- protectedvoidonDestroy()
- super.onDestroy();
- protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
- 如果jdkPay函数中直接调用Utils.getInstances().pay函数,会提示
Can't create handler inside thread
that has not called Looper.prepare()
即不能在子线程中刷新ui
所以新建一个handler。
9、jni 调用文件 头文件
copy
extern"C"
- //参数:...计费点代码字串
- voidshowTipDialog(constchar*billIndex);
- #endif
10、cpp文件
copy
#include"../../Classes/Result.h"
- #include"jniBridge.h"
- #include"cocos2d.h"
- #include"platformandroidjni/JniHelper.h"
- #includejni.h #defineCLASS_NAME"org/cocos2dx/cpp/AppActivity"
- usingnamespacecocos2d;
- extern"C"
- voidJava_org_cocos2dx_cpp_AppActivity_callBack(JNIEnv*env,jobjectthiz,jstringstate,jstringbillingIndex)
- constchar*pState=env->GetStringUTFChars(state,NULL);
- constchar*pIndex=env->GetStringUTFChars(billingIndex,NULL);
- if(strcmp(pState,"1")==0)
- doSuccess(pIndex);//成功后调用的函数,在文件头部要#include此函数文件如Result.h
- elseif(strcmp(pState,"2")==0)
- doFault(pIndex);//失败后调用的函数,在文件头部要#include此函数文件如Result.h
- {//取消购买时
- doCancel(pIndex);//取消后调用的函数,在文件头部要#include此函数文件如Result.h
- env->ReleaseStringUTFChars(state,pState);
- env->ReleaseStringUTFChars(billingIndex,pIndex);
- voidshowTipDialog(constchar*billIndex)
- JniMethodInfominfo;
- jobjectjobj;
- if(JniHelper::getStaticMethodInfo(minfo,CLASS_NAME,"getInstance","()Ljava/lang/Object;"))
- jobj=minfo.env->CallStaticObjectMethod(minfo.classID,minfo.methodID);
- if(JniHelper::getMethodInfo(minfo,"jdkPay","(Ljava/lang/String;)V"))
- jstringjindex=minfo.env->NewStringUTF(billIndex);
- minfo.env->CallVoidMethod(jobj,minfo.methodID,jindex);
- minfo.env->DeleteLocalRef(jindex);
- Over
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|