360SDK单机支付服务

2018-10-10 11:02 更新

1.1支付流程


流程介绍

1. 应用调用SDK支付接口

2. 360SDK展示支付页面,引导用户完成支付流程;

3. 支付结束或退出360SDK支付客户端界面后,360SDK客户端会返回支付结果给应用客户端的支付模块;

 1.2支付接口-客户端调用


功能说明:

应用调用360SDK支付接口时, 360SDK弹出支付界面. 用户在界面上完成支付.

[注] 单机支付接口优先使用运营商短代支付,当短代通道不可用(如开发者没有申请相应运营商的短代支付,或运营商关闭了该短代支付方式)时,单机SDK自动调用奇虎360的在线支付方式。

 

接口形式:

public static void invokeActivity(Context context, Intent intent, IDispatcherCallback callback)

接口示例:

注意:

1  必选参数不能为空, 不能为0,否则支付失败。

2、 参数名,以ProtocolKeys中定义的常量为准。

 /**
     * 使用360SDK的支付接口
     * 
     * @param isLandScape 是否横屏显示支付界面
     * @param isFixed 是否定额支付
     */
private void doSdkPay(boolean isLandScape, boolean isFixed) {
        // 支付基础参数
        Intent intent = getPayIntent(isLandScape, isFixed);
 
        // 必需参数,使用360SDK的支付模块。
        intent.putExtra(ProtocolKeys.FUNCTION_CODE, ProtocolConfigs.FUNC_CODE_OFFLINE_PAY);
       Matrix.invokeActivity(this, intent, mPayCallback);
}
/***
 * 生成调用360SDK支付接口基础参数的Intent * 
 * @param isLandScape
 * @param pay
 * @return Intent
 */
protected Intent getPayIntent(boolean isLandScape, boolean isFixed) {
    Bundle bundle = new Bundle();
    // 界面相关参数,360SDK界面是否以横屏显示。
    bundle.putBoolean(ProtocolKeys.IS_SCREEN_ORIENTATION_LANDSCAPE, isLandScape);
// 可选参数,背景图片路径,必须是本地图片路径
    bundle.putString(ProtocolKeys.UI_BACKGROUND_PICTRUE, "");
    // *** 以下非界面相关参数 ***
//设置QihooPay中的参数
    // 必需参数,所购买商品金额, 以分为单位。金额大于等于100分,360SDK运行定额支付流程; 金额数为0,360SDK运行
    不定额支付流程。
    bundle.putString(ProtocolKeys.AMOUNT, moneyAmount);
 
    // 必需参数,人民币与游戏充值币的兑换比例,例如2,代表1元人民币可以兑换2个游戏币,整数。
    bundle.putString(ProtocolKeys.RATE, Constants.DEMO_PAY_EXCHANGE_RATE);
 
    // 必需参数,应用自定义的商品名称,建议中文,不建议使用英文下逗号(,)和双引号("),最大10个中文字。
    bundle.putString(ProtocolKeys.PRODUCT_NAME, getString(R.string.demo_pay_product_name));
 
    // 必需参数,应用自定义的商品id,最大16字符。
    bundle.putString(ProtocolKeys.PRODUCT_ID, Constants.DEMO_PAY_PRODUCT_ID);
 
    // 必需参数,游戏或应用名称,最大16中文字。
    bundle.putString(ProtocolKeys.APP_NAME, getString(R.string.demo_pay_app_name));
 
    // 必需参数,应用内的用户名称,如游戏角色名。最大16中文字。
    bundle.putString(ProtocolKeys.APP_USER_NAME, getString(R.string.demo_pay_app_user_name));
    // 必需参数,应用分配给用户的id。最大32字符。
    bundle.putString(ProtocolKeys.APP_USER_ID, Constants.DEMO_PAY_APP_USER_ID);
 
    // 可选参数,应用扩展信息1,原样返回,最大255字符。
    bundle.putString(ProtocolKeys.APP_EXT_1, getString(R.string.demo_pay_app_ext1));
 
    // 可选参数,应用扩展信息2,原样返回,最大255字符。
bundle.putString(ProtocolKeys.APP_EXT_2, getString(R.string.demo_pay_app_ext2));
 
// 可选参数,若应用方有服务器并且服务器需要知道支付结果,则传入此参数
//应用方提供的支付结果通知uri,最大255字符。360服务器将吧支付接口回调给该Uri,具体
//协议请查看文档中,支付结果通知接口—应用服务器提供接口
//注意:DEMO使用的应用服务器url(http://sdbxapp.msdk.mobilem.360.cn)仅限DEMO示范使用,禁止正式上线//游戏把DEMO
应用服务器当做正式应用服务器使用,请使用方自己搭建应用服务器。
Bundle.putString(ProtocolKeys.NOTIFY_URI, Constants. DEMO_APP_SERVER_NOTIFY_URI);
// =========================================================
// 联通、移动、电信短代支付
// 使用此功能时,需要先到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字符,且首字母非零,否则影响支付结果
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数据格式:
成功返回
{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示例:
 
// 支付的回调
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 状态码: 0 支付成功, -1 支付取消, 1 支付失败, -2 支付进行中, 4010201和4009911 
                登录状态已失效,引导用户重新登录
                // error_msg 状态描述
                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();
            }
 
            // 用于测试数据格式是否异常。
            if (!isCallbackParseOk) {
                Toast.makeText(SdkUserBaseActivity.this, getString(R.string.data_format_error),
                        Toast.LENGTH_LONG).show();
            }
        
}
};


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号