W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
流程介紹
1. 應用調(diào)用SDK支付接口
2. 360SDK展示支付頁面,引導用戶完成支付流程;
3. 支付結(jié)束或退出360SDK支付客戶端界面后,360SDK客戶端會返回支付結(jié)果給應用客戶端的支付模塊;
功能說明:
應用調(diào)用360SDK支付接口時, 360SDK彈出支付界面. 用戶在界面上完成支付.
[注] 單機支付接口優(yōu)先使用運營商短代支付,當短代通道不可用(如開發(fā)者沒有申請相應運營商的短代支付,或運營商關(guān)閉了該短代支付方式)時,單機SDK自動調(diào)用奇虎360的在線支付方式。
接口形式:
public static void invokeActivity(Context context, Intent intent, IDispatcherCallback callback)
接口示例:
注意:
1、 必選參數(shù)不能為空, 不能為0,否則支付失敗。
2、 參數(shù)名,以ProtocolKeys中定義的常量為準。
/**
* 使用360SDK的支付接口
*
* @param isLandScape 是否橫屏顯示支付界面
* @param isFixed 是否定額支付
*/
private void doSdkPay(boolean isLandScape, boolean isFixed) {
// 支付基礎(chǔ)參數(shù)
Intent intent = getPayIntent(isLandScape, isFixed);
// 必需參數(shù),使用360SDK的支付模塊。
intent.putExtra(ProtocolKeys.FUNCTION_CODE, ProtocolConfigs.FUNC_CODE_OFFLINE_PAY);
Matrix.invokeActivity(this, intent, mPayCallback);
}
/***
* 生成調(diào)用360SDK支付接口基礎(chǔ)參數(shù)的Intent *
* @param isLandScape
* @param pay
* @return Intent
*/
protected Intent getPayIntent(boolean isLandScape, boolean isFixed) {
Bundle bundle = new Bundle();
// 界面相關(guān)參數(shù),360SDK界面是否以橫屏顯示。
bundle.putBoolean(ProtocolKeys.IS_SCREEN_ORIENTATION_LANDSCAPE, isLandScape);
// 可選參數(shù),背景圖片路徑,必須是本地圖片路徑
bundle.putString(ProtocolKeys.UI_BACKGROUND_PICTRUE, "");
// *** 以下非界面相關(guān)參數(shù) ***
//設(shè)置QihooPay中的參數(shù)
// 必需參數(shù),所購買商品金額, 以分為單位。金額大于等于100分,360SDK運行定額支付流程; 金額數(shù)為0,360SDK運行
不定額支付流程。
bundle.putString(ProtocolKeys.AMOUNT, moneyAmount);
// 必需參數(shù),人民幣與游戲充值幣的兌換比例,例如2,代表1元人民幣可以兌換2個游戲幣,整數(shù)。
bundle.putString(ProtocolKeys.RATE, Constants.DEMO_PAY_EXCHANGE_RATE);
// 必需參數(shù),應用自定義的商品名稱,建議中文,不建議使用英文下逗號(,)和雙引號("),最大10個中文字。
bundle.putString(ProtocolKeys.PRODUCT_NAME, getString(R.string.demo_pay_product_name));
// 必需參數(shù),應用自定義的商品id,最大16字符。
bundle.putString(ProtocolKeys.PRODUCT_ID, Constants.DEMO_PAY_PRODUCT_ID);
// 必需參數(shù),游戲或應用名稱,最大16中文字。
bundle.putString(ProtocolKeys.APP_NAME, getString(R.string.demo_pay_app_name));
// 必需參數(shù),應用內(nèi)的用戶名稱,如游戲角色名。最大16中文字。
bundle.putString(ProtocolKeys.APP_USER_NAME, getString(R.string.demo_pay_app_user_name));
// 必需參數(shù),應用分配給用戶的id。最大32字符。
bundle.putString(ProtocolKeys.APP_USER_ID, Constants.DEMO_PAY_APP_USER_ID);
// 可選參數(shù),應用擴展信息1,原樣返回,最大255字符。
bundle.putString(ProtocolKeys.APP_EXT_1, getString(R.string.demo_pay_app_ext1));
// 可選參數(shù),應用擴展信息2,原樣返回,最大255字符。
bundle.putString(ProtocolKeys.APP_EXT_2, getString(R.string.demo_pay_app_ext2));
// 可選參數(shù),若應用方有服務器并且服務器需要知道支付結(jié)果,則傳入此參數(shù)
//應用方提供的支付結(jié)果通知uri,最大255字符。360服務器將吧支付接口回調(diào)給該Uri,具體
//協(xié)議請查看文檔中,支付結(jié)果通知接口—應用服務器提供接口
//注意:DEMO使用的應用服務器url(http://sdbxapp.msdk.mobilem.#)僅限D(zhuǎn)EMO示范使用,禁止正式上線//游戲把DEMO
應用服務器當做正式應用服務器使用,請使用方自己搭建應用服務器。
Bundle.putString(ProtocolKeys.NOTIFY_URI, Constants. DEMO_APP_SERVER_NOTIFY_URI);
// =========================================================
// 聯(lián)通、移動、電信短代支付
// 使用此功能時,需要先到360平臺申請短信支付通道,并配合申請下來的 china_unicom.xml及china_telecom.xml 一同使
用才能支付成功。
// 商品ID(在360平臺申請計費通道時填寫的商品信息)
String goodInputId = etUnicomPayGoodInputId.getText().toString();
if(TextUtils.isEmpty(goodInputId)) {
goodInputId = Constants.DEMO_UNICOM_PAY_GOOD_INPUT_ID;
}
bundle.putString(ProtocolKeys.CONCH_PRODUCT_ID, goodInputId);
// 商戶自定義訂單號,長度必須為16字符,且首字母非零,否則影響支付結(jié)果
bundle.putString(ProtocolKeys.CONCH_DEFINED_ORDER, String.valueOf(System.currentTimeMillis()) + "000");
Intent intent = new Intent(this, ContainerActivity.class);
intent.putExtras(bundle);
return intent;
}
callback的 json數(shù)據(jù)格式:
成功返回
{error_code: 0, error_msg: "支付成功", content:""}
失敗返回
{error_code: 1, error_msg: "支付失敗", content:""}
取消返回
{error_code: -1, error_msg: "支付取消", content:""}
支付正在進行
{error_code: -2, error_msg: "正在進行", content:""}
callback示例:
// 支付的回調(diào)
private IDispatcherCallback mPayCallback = new IDispatcherCallback() {
@Override
public void onFinished(String data) {
Log.d(TAG, "mPayCallback, data is " + data);
if(TextUtils.isEmpty(data)) {
return;
}
boolean isCallbackParseOk = false;
JSONObject jsonRes;
try {
jsonRes = new JSONObject(data);
// error_code 狀態(tài)碼: 0 支付成功, -1 支付取消, 1 支付失敗, -2 支付進行中, 4010201和4009911
登錄狀態(tài)已失效,引導用戶重新登錄
// error_msg 狀態(tài)描述
int errorCode = jsonRes.optInt("error_code");
isCallbackParseOk = true;
switch (errorCode) {
case 0:
case 1:
case -1:
case -2: {
isAccessTokenValid = true;
isQTValid = true;
String errorMsg = jsonRes.optString("error_msg");
String text = getString(R.string.pay_callback_toast, errorCode, errorMsg);
Toast.makeText(SdkUserBaseActivity.this, text, Toast.LENGTH_SHORT).show();
}
break;
case 4010201:
//access_token失效
isAccessTokenValid = false;
Toast.makeText(SdkUserBaseActivity.this, R.string.access_token_invalid,
Toast.LENGTH_SHORT).show();
break;
case 4009911:
//QT失效
isQTValid = false;
Toast.makeText(SdkUserBaseActivity.this, R.string.qt_invalid,
Toast.LENGTH_SHORT).show();
break;
default:
break;
}
} catch (JSONException e) {
e.printStackTrace();
}
// 用于測試數(shù)據(jù)格式是否異常。
if (!isCallbackParseOk) {
Toast.makeText(SdkUserBaseActivity.this, getString(R.string.data_format_error),
Toast.LENGTH_LONG).show();
}
}
};
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: