360SDK單機支付服務

2018-10-10 11:02 更新

1.1支付流程


流程介紹

1. 應用調(diào)用SDK支付接口

2. 360SDK展示支付頁面,引導用戶完成支付流程;

3. 支付結(jié)束或退出360SDK支付客戶端界面后,360SDK客戶端會返回支付結(jié)果給應用客戶端的支付模塊;

 1.2支付接口-客戶端調(diào)用


功能說明:

應用調(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();
            }
        
}
};


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號