游戏接入百度云平台,玩家可使用百度账号登录游戏,并进行相应的充值 作,其中充值方式有:<1>百钻;<2>信用卡;<3>储蓄卡;<4>支付宝;<5>银联
1在百度开发中心注册并提交应用,获取APP_ID和API Key的值,在接入SDK时需要用到;
2将百度SDK导入到Eclipse IDE中,在游戏项目引入该类型为library的百度SDK
3配置AndroidManifest.xml文件<!-- 百度钱包中的银联支付 --> <activity android:name="com.unio ay.upomp.bypay.activity. lashActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.CardMainActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.PayMainActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.PayItActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.PayResultActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.AccountMainActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.LoginActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.RegisterActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.GetpassActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.EditpassActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.EditinfoActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.AddCardActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.UserProtocalActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.CheckCardBalanceActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.CardInfoActivity" android:screenOrientation="portrait" /> <activity android:name="com.unio ay.upomp.bypay.activity.CardBankResultActivity" android:screenOrientation="portrait" /> <!-- 百度钱包 --> <activity android:name="com.baidu.android.pay.ui.WebViewActivity"/> <activity android:name="com.baidu.android.pay.ui.SupportedCreditsActivity" /> <activity android:name="com.baidu.android.pay.ui.game.BindCreditAcitvity" /> <activity android:name="com.baidu.android.pay.ui.game.BindDebitFirstActivity" /> <activity android:name="com.baidu.android.pay.ui.game.BindDebitSecondAcitvity"/> <activity android:name="com.baidu.android.pay.ui.game.BondCardPayActivity"/> <activity android:name="com.baidu.android.pay.ui.game.PayResultActivity" /> <activity android:name="com.baidu.android.pay.ui.game.Surplu ayActivity"/> <activity android:name="com.baidu.android.pay.ui.SampleLoginActivity" /> <activity android:name="com.baidu.android.pay.ui.DynamicLoginActivity" /> <activity android:name="com.baidu.android.pay.ui.SocialLoginAcitivity" /> <activity android:name="com.baidu.android.pay.ui.FillSec PWD" />添加权限<!-- 权限 --> <!-- 杀死应用程序 --> <uses-permission android:name="android.permission.RESTART_PACKAGES" /> <!-- 允许震动 --> <uses-permission android:name="android.permission.VIBRATE" /> <!-- 读取手机状态 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 访问WIFI网络 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <!-- 读写存储卡 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 允许读写系统设置项 --> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 允许程序开机启动 --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- 发送持久广播 --> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> <!-- 接受WAP PUSH信息 --> <uses-permission android:name="android.permission.RECEIVE_WAP_PUSH" /> <!-- 唤醒 --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- 允许结束后台进程 --> <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> <!-- 读取系统日志 --> <uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" /> <!-- 悬浮窗口 --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 允许程序打开窗口 --> <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" /> <!-- 允许应用发送短信 --> <uses-permission android:name="android.permission.SEND_ S" /> <!-- 允许应用获取目前或最近运行的任务 --> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <!-- 允许应用请求认证令牌 --> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <!-- 允许应用管理账号列表 --> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> <!-- 允许应用访问地理位置 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 允许程序打开系统级别的窗口 --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />配置元数据<!-- 接入百度云平台 --> <meta-data android:name="BaiduMobAd_CHANNEL" android:value="baidu" /> <meta-data android:name="BaiduMobAd_STAT_ID" android:value="fcce056759" /> <meta-data android:name="BaiduMobAd_EXCEPTION_LOG" android:value="true" /> <meta-data android:name="BaiduMobAd_SEND_STRATEGY" android:value="APP_START" /> <meta-data android:name="BaiduMobAd_TIME_INTERVAL" android:value="2" /> <meta-data android:name="BaiduMobAd_ONLY_WIFI" android:value="false" /> <meta-data android:name="BaiduMobAd_CELL_LOCATION" android:value="true" />
4百度云开放平台SDK的用户登录类,I114gBoxBaiduLoginActivity.j a,其代码内容如下:package com.i114gbox.a ieguy.op.baidu;/*** 百度云平台登录** @author SJC**/pu ic class I114gBoxBaiduLoginActivity extends I114gBoxActivity { private static String TAG = "I114gBoxBaiduLoginActivity"; pu ic int ret; pu ic Button payButton; pu ic CheckBox is_third; private Context ctx = null; @Override protected void onCreate(Bundle s edInstanceState) { I114gBoxLogUtils.d(TAG, "The onCreate method execute."); super.onCreate(s edInstanceState); I114gBoxCollectActivityUtils.getInstance().addActivity(this);// 收集Activity ctx = this; SharedPreferences preferences = getSharedPreferences("mycfg", MODE_PRIVATE); int storedPreference = preferences.getInt("mykey", 0); if (storedPreference == 1) {// 横屏 // 强制为横屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else {// 竖屏 // 强制为竖屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } // SDK初始化 SDKApi.init(I114gBoxBaiduLoginActivity.this, storedPreference, I114gBoxBaiduPayConfig.appid); // 显示界面视图 showView(storedPreference); } /** * 签名拼写 * * @param appid * @param appKey * @param CurrentTime * @return */ pu ic String Sign(String appid, String appKey, String CurrentTime) { StringBuilder = new StringBuilder(); .append(appid).append(appKey).append(CurrentTime); String unSignValue = .toString(); return unSignValue; } /** * 签名拼写 * * @param appid * @param appKey * @param CurrentTime * @return */ pu ic String Sign_Login_Callback_Ex(String appid, String appKey, String CurrentTime, String token) { StringBuilder = new StringBuilder(); // 按照升序排列 .append(appid).append(appKey).append(CurrentTime).append(token); String unSignValue = .toString(); Log.e("tag", "unSignValue:" + unSignValue); return unSignValue; } /** * 签名拼写 * * @param appid * @param appKey * @param CurrentTime * @return */ pu ic String Sign_Login_Callback(String appid, String appKey, String CurrentTime, String userName, long userID) { StringBuilder = new StringBuilder(); // 按照升序排列 .append(appid).append(appKey).append(CurrentTime).append(userName) .append(userID); String unSignValue = .toString(); Log.e("tag", "unSignValue:" + unSignValue); return unSignValue; } // MD5加密,32位 pu ic static String MD5(String str) { MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); } catch (Exception e) { e.printStackTrace(); return ""; } char[] charArray = str.toCharArray(); byte[] byteArray = new byte[charArray.length]; for (int i = 0; i < charArray.length; i++) { byteArray[i] = (byte) charArray[i]; } byte[] md5Bytes = md5.digest(byteArray); StringBuffer hexValue = new StringBuffer(); for (int i = 0; i < md5Bytes.length; i++) { int val = ((int) md5Bytes[i]) & 0xff; if (val < 16) { hexValue.append("0"); } hexValue.append(Integer.toHexString(val)); } return hexValue.toString(); } /** 显示界面视图 **/ pu ic void showView(int sdkType) { setContentView(I114gBoxReso eUtils.getLayoutId(ctx, "activity_baidu_login")); is_third = (CheckBox) findViewById(I114gBoxReso eUtils.getId(ctx, "cb_baidu_login_support_third")); // 简化模式登录 findViewById( I114gBoxReso eUtils.getId(ctx, "btn_baidu_login_simplif ")) .setOnClickListener(new OnClickListener() { pu ic void onClick(View v) { boolean flag = is_third.isChecked(); final String time = System.currentTimeMillis() + ""; final String sign = MD5(Sign( I114gBoxBaiduPayConfig.appid, I114gBoxBaiduPayConfig.appkey, time)); // 调用简化模式登录 SDKApi.loginUI(I114gBoxBaiduLoginActivity.this, I114gBoxBaiduPayConfig.appid, time, sign, new ILoginCallback() { @Override pu ic void onCallBack(int retcode, String userName, long uid, String sign) { I114gBoxLogUtils.i(TAG, "简化模式登录===" + "userName:" + userName + "|" + "uid:" + uid + "|" + "sign:" + sign); if (retcode == ILoginCallback.RETCODE_SUCCESS) {// 当简化模式登录成功时 String orderEnc = MD5(Sign_Login_Callback( I114gBoxBaiduPayConfig.appid, I114gBoxBaiduPayConfig.appkey, time, userName, uid)); if (sign.equalsIgnoreCase(orderEnc)) { Toast.makeText( ctx, "简化模式登录结果:" + userName + "登录成功,验证签名成功!" + uid, Toast.LENGTH_SHORT) .show(); // 进入游戏 Intent intent = new Intent( ctx, I114gBoxBaiduPayActivity.class); startActivity(intent); finish(); } else { Toast.makeText( ctx, "APP登录结果:" + userName + "登录成功,验证签名失败!" + uid, Toast.LENGTH_LONG) .show(); } } else if (retcode == ILoginCallback.RETCODE_FAIL) {// 简化模式登录失败 Toast.makeText(ctx, "APP登录结果:" + "登录失败", Toast.LENGTH_LONG).show(); } } }, flag, false); } }); // 标准模式登录 findViewById( I114gBoxReso eUtils.getId(ctx, "btn_baidu_login_standard")) .setOnClickListener(new OnClickListener() { pu ic void onClick(View v) { boolean flag = is_third.isChecked(); final String time = System.currentTimeMillis() + ""; final String sign = MD5(Sign( I114gBoxBaiduPayConfig.appid, I114gBoxBaiduPayConfig.appkey, time)); // 调用标准模式登录 SDKApi.loginUIEx(I114gBoxBaiduLoginActivity.this, I114gBoxBaiduPayConfig.appid, time, sign, new ILoginCallbackEx() { @Override pu ic void onCallBack(int retcode, String token, String sign) { I114gBoxLogUtils.i(TAG, "标准模式登录===" + "token:" + token + "|" + "sign:" + sign); if (retcode == ILoginCallback.RETCODE_SUCCESS) {// 当标准模式登录成功时 String orderEnc = MD5(Sign_Login_Callback_Ex( I114gBoxBaiduPayConfig.appid, I114gBoxBaiduPayConfig.appkey, time, token)); if (sign.equalsIgnoreCase(orderEnc)) {// 当验证签名成功时 Toast.makeText( ctx, "APP获取Token结果:" + token + "成功,验证签名成功!", Toast.LENGTH_LONG) .show(); Intent intent = new Intent( ctx, I114gBoxBaiduPayActivity.class); startActivity(intent); finish(); } else {// 当签名验证失败时 Toast.makeText( ctx, "APP获取Token结果:" + token + "成功,验证签名失败!", Toast.LENGTH_LONG) .show(); } } else if (retcode == ILoginCallback.RETCODE_FAIL) {// 当标准模式登录失败时 Toast.makeText( I114gBoxBaiduLoginActivity.this, "APP获取token失败", Toast.LENGTH_LONG).show(); } } }, flag, false); } }); }}
5百度云开放平台SDK的支付类,I114gBoxBaiduPayActivity.j a,其内容如下:package com.i114gbox.a ieguy.op.baidu;pu ic class I114gBoxBaiduPayActivity extends I114gBoxActivity { private static String TAG = "I114gBoxBaiduPayActivity"; private CheckBox check; private boolean misAysn; private Context ctx = null; @Override protected void onCreate(Bundle s edInstanceState) { I114gBoxLogUtils.d(TAG, "The onCreate method execute."); super.onCreate(s edInstanceState); I114gBoxCollectActivityUtils.getInstance().addActivity(this);// 收集Activity ctx = this; SharedPreferences preferences = getSharedPreferences("mycfg", MODE_PRIVATE); final int storedPreference = preferences.getInt("mykey", 0); if (storedPreference == 1) {// 横屏 // 强制为横屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else {// 竖屏 // 强制为竖屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } // 设置布局文件 setContentView(I114gBoxReso eUtils.getLayoutId(ctx, "activity_baidu_pay")); // 获取支付是否异步请求 check = (CheckBox) findViewById(I114gBoxReso eUtils.getId(ctx, "cb_baidu_pay_async")); // 获取需要充值的金额 final EditText etPrice = (EditText) findViewById(I114gBoxReso eUtils .getId(ctx, "et_baidu_price")); etPrice.setI utType(I utType.TYPE_CLASS_NUMBER); // 支付 findViewById(I114gBoxReso eUtils.getId(ctx, "btn_baidu_pay")) .setOnClickListener(new OnClickListener() { pu ic void onClick(View v) { String price = etPrice.getText().toString().trim(); if (TextUtils.isEmpty(price)) {// 当充值金额为空时 Toast.makeText(ctx, "请输入收费金额", Toast.LENGTH_SHORT) .show(); etPrice.requestFocus(); } else if (Integer.parseInt(price) <= 0) {// 当充值金额输入不合法时 Toast.makeText(ctx, "收费金额应大于0", Toast.LENGTH_SHORT) .show(); etPrice.requestFocus(); } else {// 支付开始 SDKApi.init(I114gBoxBaiduPayActivity.this, storedPreference, I114gBoxBaiduPayConfig.appid); /* waresid目前固定填1 price的单位为分,请注意 */ // 开始支付 startPay(1, Integer.parseInt(price)); // 请填写商品自己的参数 } } }); // 退出 findViewById(I114gBoxReso eUtils.getId(ctx, "btn_baidu_exit")) .setOnClickListener(new OnClickListener() { pu ic void onClick(View v) { finish(); } }); /** 生成外部订单号 请保证唯一性 **/ @SuppressLint("SimpleDateFormat") pu ic String genExorderno() { DateFormat dateFormat = new SimpleDateFormat("yyyy dHHmmssS"); Date date = new Date(); String orderNo = dateFormat.format(date); I114gBoxLogUtils.i(TAG, "订单号为:" + orderNo); return orderNo; } /** 开始支付 **/ pu ic void startPay(int waresid, int price) { misAysn = check.isChecked(); PayRequest payRequest = new PayRequest(); // 应用方提供的通知URL payRequest.addParam("notifyurl", I114gBoxBaiduPayConfig.notifyurl); // 应用ID payRequest.addParam("appid", I114gBoxBaiduPayConfig.appid); // 计费系统中的商品编码 payRequest.addParam("waresid", 1); // 商品订单号 payRequest.addParam("exorderno", genExorderno()); // 商品价格 payRequest.addParam("price", price); // 扩展信息,原样返回 payRequest.addParam("cpprivateinfo", "123456"); if (misAysn) payRequest.addParam("asyncflag", 1); String paramUrl = payRequest .genSignedUrlParamString(I114gBoxBaiduPayConfig.appkey); SDKApi.startPay(I114gBoxBaiduPayActivity.this, paramUrl, new IPayResultCallback() { @Override pu ic void o ayResult(int resultCode, String signValue, String resultInfo) {// resultInfo = 应用编号&商品编号&外部订单号 I114gBoxLogUtils.i(TAG, "resultCode:" + resultCode + "|" + "signValue:" + signValue + "|" + "resultInfo:" + resultInfo); if (SDKApi.PAY_SUCCESS == resultCode) {// 当支付成功时 if (null == signValue) { // 没有签名值,默认采用finish(),请根据需要修改 Toast.makeText(ctx, "没有签名值", Toast.LENGTH_SHORT) .show(); // //finish(); } boolean flag = PayRequest.isLegalSign(signValue, resultInfo, I114gBoxBaiduPayConfig.appkey); if (flag) { // 合法签名值,支付成功,请添加支付成功后的业务逻辑 Toast.makeText(ctx, "支付成功", Toast.LENGTH_SHORT) .show(); } else { // 非法签名值,默认采用finish(),请根据需要修改 Toast.makeText(ctx, "支付成功,但是验证签名失败", Toast.LENGTH_SHORT).show(); } } else if (SDKApi.PAY_CANCEL == resultCode) {// 当支付取消时 // 取消支付处理,默认采用finish(),请根据需要修改 Toast.makeText(ctx, "取消支付", Toast.LENGTH_SHORT) .show(); } else if (SDKApi.PAY_HANDLING == resultCode) {// 当支付正在处理中 // 如果返回支付正在处理,请通过您的服务器查询 Toast.makeText(ctx, "支付处理中", Toast.LENGTH_SHORT) .show(); } else {// 当支付失败时 // 计费失败处理,默认采用finish(),请根据需要修改 Toast.makeText(I114gBoxBaiduPayActivity.this, "支付失败", Toast.LENGTH_LONG).show(); } } }); }}
6运行结果如下: