anysdk-Lua支付系统接口

来自AnySDK 文档
跳转至: 导航搜索
本文介绍的是AnySDK Framework 在cocos2d-x Lua中,支付、分享、广告等系统使用的各个接口。

流程图

支付流程.jpg

文字简述

1、游戏客户端APP调用AnySDK框架支付接口请求订单号
2、AnySDK框架获取订单号
3、AnySDK框架向渠道平台服务器请求支付
4、支付成功后,渠道平台服务器同步通知AnySDK框架(游戏客户端)
5、渠道平台服务器会异步通知AnySDK服务器
6、AnySDK服务器响应渠道平台服务器
7、AnySDK服务器将支付结果通知到游戏服务器
8、游戏服务器响应AnySDK支付通知
9、游戏服务器验证支付通知并发放道具

调用 IAPSystem 的各个方法

获取支付插件对象

AnySDK框架支持多个支付插件,AnySDK客户端选择多少个支付,getIAPPlugin就能获取到多少个。一般情况只会选择一个支付插件,如果选择多个支付插件需要开发者自己提供相关界面完成多支付的逻辑展示。
如果只有一个支付插件,可以直接调用获取该唯一的对象。

local iap_plugins = agent:getIAPPlugin()
local iap_plugin
for key, value in pairs(iap_plugins) do
    iap_plugin = value
end

如果有多个支付插件,可以通过id获取指定对象。

local iap_plugins = agent:getIAPPlugin()
local iap_plugin = iap_plugins[pluginID] //可通过for循环输出各个插件的key来判断自己所需要支付插件的key值。

设置监听

iap_plugin:setResultListener(onResult)
local function onResult( code, msg, info )
    if code == PayResultCode.kPaySuccess  then
        --do something
    end
end

支付

void payForProduct(productInfo);
productInfo 实际上是一个table(例:{key:value}),记录了支付的一些相关的信息,开发者需要提供支付的如下参数:
注意:调用支付函数时需要传入的一些玩家信息参数(如角色名称,ID,等级)都是渠道强制需求(如UC,小米),并非AnySDK收集所用,如果开发者不填或者填假数据都会导致渠道上架无法通过。
必传参数不能为空,若当前没有可用的值可以写任意值上去
个别渠道可能还需要添加其他参数,请参考常见问题中的渠道说明,根据渠道判断并添加上相应参数
参数 是否必传 参数说明
Product_Id Y 商品id(联想、七匣子、酷派等商品id要与在渠道后台配置的商品id一致)
参数类型:字符串
Product_Name Y 商品名
参数类型:字符串
Product_Price Y 商品价格(元),可能有的SDK只支持整数
参数类型:字符串
Product_Count Y 商品份数(除非游戏需要支持一次购买多份商品,否则传1即可)
参数类型:字符串
Product_Desc N 商品描述(不传则使用Product_Name)
参数类型:字符串
Coin_Name Y 虚拟币名称(如金币、元宝)
参数类型:字符串
Coin_Rate Y 虚拟币兑换比例(例如100,表示1元购买100虚拟币)
参数类型:字符串
Role_Id Y 游戏角色id
参数类型:字符串
Role_Name Y 游戏角色名
参数类型:字符串
Role_Grade Y 游戏角色等级
参数类型:字符串
Role_Balance Y 用户游戏内虚拟币余额,如元宝,金币,符石
参数类型:字符串
Vip_Level Y Vip等级
参数类型:字符串
Party_Name Y 帮派、公会等
参数类型:字符串
Server_Id Y 服务器id,若无填“1”
参数类型:字符串
Server_Name Y 服务器名
参数类型:字符串
EXT N 扩展字段
参数类型:字符串,可以使用json型字符串。

因有些SDK不支持浮点数,Product_Price请传入整数。

回调信息
回调信息 code msg
支付成功 kPaySuccess null或者错误信息的简单描述
支付取消 kPayCancel null或者错误信息的简单描述
支付失败 kPayFail null或者错误信息的简单描述
支付网络出现错误 kPayNetworkError null或者错误信息的简单描述
支付信息提供不完全 kPayProductionInforIncomplete null或者错误信息的简单描述

举例说明

local info = {
    Product_Id="1", 
    Product_Price="1", 
    Product_Name="10金币",  
    Product_Count="1",
    Coin_Name="金币",
    Coin_Rate="10",  
    Role_Id="1001",  
    Role_Name="张三",
    Role_Grade="50",
    Role_Balance="1",
    Vip_Level="1",
    Party_Name="无",
    Server_Id="1",
    Server_Name="服务器1"
}
iap_plugin:payForProduct(info)

获取订单号

string getOrderId()

用户可通过该函数获取到订单号。

local order_id = iap_plugin:getOrderId()

注意:调用payForProduct后立即调用getOrderId的话是获取不到该次支付的订单号的,因为此时客户端还没收到服务端返回的订单号,请在收到支付回调后调用getOrderId。

重置支付状态

void resetPayState()

支付过程中若SDK没有回调结果,就认为支付正在进行中,再次调用支付的时候会回调kPayNowPaying,可以调用该函数重置支付状态。

ProtocolIAP:resetPayState()