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文件
文件如下:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="你的包名"
- android:versionCode="19"
- android:versionName="1.1.9"
- android:installLocation="preferExternal">
- <uses-sdk android:minSdkVersion="9"/>
- <uses-feature android:glEsVersion="0x00020000" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <uses-permission android:name="android.permission.INTERNET"/>
- <uses-permission android:name="android.permission.SEND_SMS"/>
- <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
- <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- <application
- android:name="你的包名.MyApplication"
- android:allowBackup="true"
- android:label="@string/app_name"
- android:icon="@drawable/icon">
- <!-- Tell Cocos2dxActivity the name of our .so -->
- <meta-data android:name="android.app.lib_name"
- android:value="cocos2dcpp" />
- <activity android:name="com.unicom.dcLoader.welcomeview"
- android:label="@string/app_name"
- android:screenOrientation="portrait"
- android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
- android:configChanges="keyboardHidden|screenSize|navigation|orientation" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- <meta-data android:name="UNICOM_DIST_ACTIVITY" android:value="org.cocos2dx.cpp.AppActivity"/>
- </activity>
- <activity android:name="org.cocos2dx.cpp.AppActivity"
- android:label="@string/app_name"
- android:screenOrientation="portrait"
- android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
- android:configChanges="orientation">
- </activity>
- <service android:name="com.unicom.wostore.unipay.paysecurity.SecurityServiceFramework">
- <intent-filter>
- <action android:name="你的包名.unicom.wostore.unipay.securityserviceframework" />
- </intent-filter>
- </service>
- <meta-data android:name="wostore_billing_otherpay" android:value="false"/>
- <meta-data android:name="wostore_billing_chinaunicom" android:value="true"/>
- <meta-data android:name="wostore_billing_chinamobile" android:value="true" />
- <meta-data android:name="wostore_billing_chinatele" android:value="true" />
- </application>
- <supports-screens android: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文件内容如下:
- package 你的包名;
- import android.app.ActivityManager;
- import android.app.Application;
- import android.content.Context;
- import android.util.Log;
- import com.unicom.dcLoader.Utils;
- import com.unicom.dcLoader.Utils.UnipayPayResultListener;
- public class MyApplication extends Application
- {
- @Override
- public void onCreate()
- {
- super.onCreate();
- System.loadLibrary("megjb");
- Utils.getInstances().initSDK(this, new UnipayPayResultListener()
- {
- @Override
- public void PayResult(String arg0, int arg1, int arg2, String arg3)
- {
- }
- });
- }
- }
2)、org.cocos2dx.cpp包下的AppActivity.java 文件内容如下:
- package org.cocos2dx.cpp;
- import org.cocos2dx.lib.Cocos2dxActivity;
- import org.cocos2dx.lib.Cocos2dxGLSurfaceView;
- import org.cocos2dx.lib.Cocos2dxHandler;
- import org.cocos2dx.lib.Cocos2dxHelper;
- import com.unicom.dcLoader.Utils;
- import com.unicom.dcLoader.Utils.UnipayPayResultListener;
- import android.content.Intent;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.widget.Toast;
- import android.util.Log;
- public class AppActivity extends Cocos2dxActivity
- {
- public static AppActivity payActivity = null;
- private static String jIndex = "";
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- payActivity = this;
- }
- //返回实例
- public static Object getInstance()
- {
- if (payActivity == null)
- {
- payActivity = new AppActivity();
- }
- return payActivity;
- }
- private class payCallback implements UnipayPayResultListener
- {
- public void PayResult(String paycode, int flag, int flag2, String error)
- {
- // flag为支付回调结果,flag2为回调类型,error为当前结果描述,paycode是完整的支付编码
- switch (flag)
- {
- case 1://success
- //此处放置支付请求已提交的相关处理代码
- runNativeCallback("1",jIndex);
- break;
- case 2://fail
- runNativeCallback("2",jIndex);
- break;
- case 3://cancel
- runNativeCallback("0",jIndex);
- break;
- default:
- break;
- }
- }
- }
- public static void runNativeCallback(final String state, final String billingIndex)
- {
- Cocos2dxGLSurfaceView.getInstance().queueEvent(new Runnable()
- {
- @Override
- public void run()
- {
- callBack(state,billingIndex);
- }
- });
- }
- //根据返回结果,调用不同的处理 交易标志:istate 0:取消,1成功,2失败;
- public native static void callBack(String state,String billingIndex);
- //调用jdk的函数付款
- public void jdkPay(String billingIndex)
- {
- jIndex = billingIndex;
- String strSerial = "";
- int iSerial = 1;
- iSerial = Integer.parseInt(billingIndex);
- payHandler.sendEmptyMessage(iSerial);
- }
- private Handler payHandler = new Handler()
- {
- public void handleMessage(android.os.Message msg)
- {
- //计费点001~015对应联通的计费代码001~015
- switch(msg.what)
- {
- case 1:
- Utils.getInstances().pay(payActivity, "001", new payCallback());
- break;
- case 2:
- Utils.getInstances().pay(payActivity, "002", new payCallback());
- break;
- ...//此处省略多个case
- default:
- break;
- }
- };
- };
- @Override
- protected void onResume()
- {
- super.onResume();
- Utils.getInstances().onResume(this);
- }
- @Override
- protected void onPause()
- {
- super.onPause();
- Utils.getInstances().onPause(this);
- }
- @Override
- protected void onDestroy()
- {
- super.onDestroy();
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- }
- }
如果jdkPay函数中直接调用Utils.getInstances().pay函数,会提示 Can't create handler inside thread that has not called Looper.prepare()
即不能在子线程中刷新ui
所以新建一个handler。
9、jni 调用文件 头文件
- extern "C"
- {
- //参数:...计费点代码字串
- void showTipDialog(const char* billIndex);
- }
- #endif
10、cpp文件
- #include "../../Classes/Result.h"
- #include "jniBridge.h"
- #include "cocos2d.h"
- #include "platform\android\jni/JniHelper.h"
- #include <jni.h>
- #define CLASS_NAME "org/cocos2dx/cpp/AppActivity"
- using namespace cocos2d;
- extern "C"
- {
- void Java_org_cocos2dx_cpp_AppActivity_callBack(JNIEnv* env,jobject thiz,jstring state, jstring billingIndex)
- {
- const char * pState = env->GetStringUTFChars(state,NULL);
- const char * pIndex = env->GetStringUTFChars(billingIndex,NULL);
- if(strcmp(pState,"1") == 0)
- {
- doSuccess(pIndex);//成功后调用的函数,在文件头部要#include此函数文件如Result.h
- }
- else if(strcmp(pState,"2") == 0)
- {
- doFault(pIndex);//失败后调用的函数,在文件头部要#include此函数文件如Result.h
- }
- else if(strcmp(pState,"0") == 0)
- { //取消购买时
- doCancel(pIndex);//取消后调用的函数,在文件头部要#include此函数文件如Result.h
- }
- env->ReleaseStringUTFChars(state,pState);
- env->ReleaseStringUTFChars(billingIndex,pIndex);
- }
- void showTipDialog(const char* billIndex)
- {
- JniMethodInfo minfo;
- jobject jobj;
- if (JniHelper::getStaticMethodInfo(minfo, CLASS_NAME,"getInstance", "()Ljava/lang/Object;"))
- {
- jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
- if (JniHelper::getMethodInfo(minfo, CLASS_NAME,"jdkPay", "(Ljava/lang/String;)V"))
- {
- jstring jindex = minfo.env->NewStringUTF(billIndex);
- minfo.env->CallVoidMethod(jobj, minfo.methodID,jindex);
- minfo.env->DeleteLocalRef(jindex);
- }
- }
- }
- }
Over