精彩课程推荐

[其他渠道] 360单机游戏sdk单机支付服务说明文档

[复制链接]
查看: 2862|回复: 1
发表于 2017-6-3 11:19:50 | 显示全部楼层 |阅读模式
1.1支付流程

流程介绍

1.         应用调用SDK支付接口

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

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

1.2支付接口-客户端调用

功能说明:

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

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


接口形式:

  1. public static void invokeActivity(Context context, Intent intent, IDispatcherCallback callback)
复制代码

接口示例:

注意:

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

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

  1. /**

  2.      * 使用360SDK的支付接口

  3.      *

  4.      * @param isLandScape 是否横屏显示支付界面

  5.      * @param isFixed 是否定额支付

  6.      */

  7. private void doSdkPay(boolean isLandScape, boolean isFixed) {

  8.         // 支付基础参数

  9.         Intent intent = getPayIntent(isLandScape, isFixed);



  10.         // 必需参数,使用360SDK的支付模块。

  11.         intent.putExtra(ProtocolKeys.FUNCTION_CODE, ProtocolConfigs.FUNC_CODE_OFFLINE_PAY);

  12.        Matrix.invokeActivity(this, intent, mPayCallback);

  13. }

  14. /***

  15. * 生成调用360SDK支付接口基础参数的Intent *

  16. * @param isLandScape

  17. * @param pay

  18. * @return Intent

  19. */

  20. protected Intent getPayIntent(boolean isLandScape, boolean isFixed) {

  21.     Bundle bundle = new Bundle();

  22.     // 界面相关参数,360SDK界面是否以横屏显示。

  23.     bundle.putBoolean(ProtocolKeys.IS_SCREEN_ORIENTATION_LANDSCAPE, isLandScape);

  24. // 可选参数,背景图片路径,必须是本地图片路径

  25.     bundle.putString(ProtocolKeys.UI_BACKGROUND_PICTRUE, "");

  26.     // *** 以下非界面相关参数 ***

  27. //设置QihooPay中的参数

  28.     // 必需参数,所购买商品金额, 以分为单位。金额大于等于100分,360SDK运行定额支付流程; 金额数为0,360SDK运行

  29.     不定额支付流程。

  30.     bundle.putString(ProtocolKeys.AMOUNT, moneyAmount);



  31.     // 必需参数,人民币与游戏充值币的兑换比例,例如2,代表1元人民币可以兑换2个游戏币,整数。

  32.     bundle.putString(ProtocolKeys.RATE, Constants.DEMO_PAY_EXCHANGE_RATE);



  33.     // 必需参数,应用自定义的商品名称,建议中文,不建议使用英文下逗号(,)和双引号("),最大10个中文字。

  34.     bundle.putString(ProtocolKeys.PRODUCT_NAME, getString(R.string.demo_pay_product_name));



  35.     // 必需参数,应用自定义的商品id,最大16字符。

  36.     bundle.putString(ProtocolKeys.PRODUCT_ID, Constants.DEMO_PAY_PRODUCT_ID);



  37.     // 必需参数,游戏或应用名称,最大16中文字。

  38.     bundle.putString(ProtocolKeys.APP_NAME, getString(R.string.demo_pay_app_name));



  39.     // 必需参数,应用内的用户名称,如游戏角色名。最大16中文字。

  40.     bundle.putString(ProtocolKeys.APP_USER_NAME, getString(R.string.demo_pay_app_user_name));

  41.     // 必需参数,应用分配给用户的id。最大32字符。

  42.     bundle.putString(ProtocolKeys.APP_USER_ID, Constants.DEMO_PAY_APP_USER_ID);



  43.     // 可选参数,应用扩展信息1,原样返回,最大255字符。

  44.     bundle.putString(ProtocolKeys.APP_EXT_1, getString(R.string.demo_pay_app_ext1));



  45.     // 可选参数,应用扩展信息2,原样返回,最大255字符。

  46. bundle.putString(ProtocolKeys.APP_EXT_2, getString(R.string.demo_pay_app_ext2));



  47. // 可选参数,若应用方有服务器并且服务器需要知道支付结果,则传入此参数

  48. //应用方提供的支付结果通知uri,最大255字符。360服务器将吧支付接口回调给该Uri,具体

  49. //协议请查看文档中,支付结果通知接口—应用服务器提供接口

  50. //注意:DEMO使用的应用服务器url(http://sdbxapp.msdk.mobilem.360.cn)仅限DEMO示范使用,禁止正式上线//游戏把DEMO

  51. 应用服务器当做正式应用服务器使用,请使用方自己搭建应用服务器。

  52. Bundle.putString(ProtocolKeys.NOTIFY_URI, Constants. DEMO_APP_SERVER_NOTIFY_URI);

  53. // =========================================================

  54. // 联通、移动、电信短代支付

  55. // 使用此功能时,需要先到360平台申请短信支付通道,并配合申请下来的 china_unicom.xml及china_telecom.xml 一同使

  56. 用才能支付成功。

  57. // 商品ID(在360平台申请计费通道时填写的商品信息)

  58. String goodInputId = etUnicomPayGoodInputId.getText().toString();

  59. if(TextUtils.isEmpty(goodInputId)) {

  60.    goodInputId = Constants.DEMO_UNICOM_PAY_GOOD_INPUT_ID;

  61. }



  62. bundle.putString(ProtocolKeys.CONCH_PRODUCT_ID, goodInputId);

  63. // 商户自定义订单号,长度必须为16字符,且首字母非零,否则影响支付结果

  64. bundle.putString(ProtocolKeys.CONCH_DEFINED_ORDER, String.valueOf(System.currentTimeMillis()) + "000");



  65. Intent intent = new Intent(this, ContainerActivity.class);

  66. intent.putExtras(bundle);

  67. return intent;

  68. }
复制代码

callback的 json数据格式:

  1. 成功返回

  2. {error_code: 0, error_msg: "支付成功", content:""}

  3. 失败返回

  4. {error_code: 1, error_msg: "支付失败", content:""}

  5. 取消返回

  6. {error_code: -1, error_msg: "支付取消", content:""}

  7. 支付正在进行

  8. {error_code: -2, error_msg: "正在进行", content:""}
复制代码

callback示例:

  1. // 支付的回调

  2. private IDispatcherCallback mPayCallback = new IDispatcherCallback() {

  3. @Override

  4. public void onFinished(String data) {

  5.             Log.d(TAG, "mPayCallback, data is " + data);

  6.             if(TextUtils.isEmpty(data)) {

  7.                 return;

  8.             }

  9.             boolean isCallbackParseOk = false;

  10.             JSONObject jsonRes;

  11.             try {

  12.                 jsonRes = new JSONObject(data);

  13.                 // error_code 状态码: 0 支付成功, -1 支付取消, 1 支付失败, -2 支付进行中, 4010201和4009911

  14.                 登录状态已失效,引导用户重新登录

  15.                 // error_msg 状态描述

  16.                 int errorCode = jsonRes.optInt("error_code");

  17.                 isCallbackParseOk = true;

  18.                 switch (errorCode) {

  19.                     case 0:

  20.                     case 1:

  21.                     case -1:

  22.                     case -2: {

  23.                         isAccessTokenValid = true;

  24.                         isQTValid = true;

  25.                         String errorMsg = jsonRes.optString("error_msg");

  26.                         String text = getString(R.string.pay_callback_toast, errorCode, errorMsg);

  27.                         Toast.makeText(SdkUserBaseActivity.this, text, Toast.LENGTH_SHORT).show();
  28.                     }

  29.                         break;

  30.                     case 4010201:

  31.                         //access_token失效

  32.                         isAccessTokenValid = false;

  33.                         Toast.makeText(SdkUserBaseActivity.this, R.string.access_token_invalid,

  34.                         Toast.LENGTH_SHORT).show();

  35.                         break;

  36.                     case 4009911:

  37.                         //QT失效

  38.                         isQTValid = false;

  39.                         Toast.makeText(SdkUserBaseActivity.this, R.string.qt_invalid,

  40.                         Toast.LENGTH_SHORT).show();

  41.                         break;

  42.                     default:

  43.                         break;
  44.                 }

  45.             } catch (JSONException e) {

  46.                 e.printStackTrace();
  47.             }


  48.             // 用于测试数据格式是否异常。

  49.             if (!isCallbackParseOk) {
  50.                 Toast.makeText(SdkUserBaseActivity.this, getString(R.string.data_format_error),
  51.                 Toast.LENGTH_LONG).show();
  52.             }
  53.         }
  54. };
复制代码





14

主题

15

帖子

56

积分

注册会员

Rank: 2

UID
13
威望
0
贡献
9
铜币
32
T币
0
主题
14
帖子
15
在线时间: 2 小时
注册时间: 2017-5-23
发表于 2017-6-18 00:39:33 | 显示全部楼层
360单机还可以上吗??要不要版号啊

0

主题

1

帖子

4

积分

新手上路

Rank: 1

UID
107
威望
0
贡献
0
铜币
3
T币
0
主题
0
帖子
1
在线时间: 30 小时
注册时间: 2017-5-23
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

商务合作

QQ群:515753718
点击这里给我发消息

扫一扫/点击加群

Copyright;  ©2015-2099  天黑互娱  Powered by游戏开发者社区  技术支持 闭眼就天黑      ( 皖ICP备14007736号-2 )