支付宝 无效的appidd怎样去付游戏币

内0分成优惠政策,收益100%返还开发者,为开发者提供乐视生态的开放能力和一站式服务平台。">
【手游SDK客户端-技术接入】
1.初始化接口(必接)
1.1.初始化
自定义Application子类,并在其onCreate方法中调用,用于初始化SDK
1.2.详细描述
void LeGameSDK init(Context&& context)
Application上下文
使用范例:
public class BaseApplication extends Application {@Overridepublic void onCreate() {super.onCreate();LeGameSDK.init(this);}}
注意:如果因特殊原因不能自定义子类去继承Application,初始化方法可以在MainActivity中的onCreate()方法中调用,但是参数必须传getApplicationContext()。
2.登录接口(必接)
2.1.授权流程
1)&&& 客户端调用手游SDK进行登录;
2)&&& 乐视手游SDK与乐视账号系统服务端通信,校验用户信息,返回登录结果(包含登录状态,或用户信息等);
3)&&& 乐视手游SDK将结果返给游戏客户端,登录完成。
2.2.详细描述
登录接口:
void login(Activity&& activity , LoginCallback callback , boolean isSwitchAccounts)
当前所在Activity实例
LoginCallback
账号登录回调接口
isSwitchAccounts
默认为false
调起账户登录页面,授权成功后回调登录结果。
使用范例:
// false表示直接登录,不切换账号mLeGameSDK.login(this , loginCallback , false);
登录结果回调接口LoginCallback:
接口示例:
&&& private LoginCallback loginCallback = new LoginCallback() {&&&&&&& @Override&&&&&&& public void onLoginSuccess(LeUserInfo userInfo) {&&&&&&&&&&& log.i(&LoginCallback:onLoginSuccess&);&&&&&&&&&&& if (userInfo != null) {&&&&&&&&&&&&&&& // 获取access_token&&&&&&&&&&&&&&& accessToken = userInfo.getAccessToken();&&&&&&&&&&&&&&& // 获取letv_uid&&&&&&&&&&&&&&& userId = userInfo.getUserId();&&&&&&&&&&&&&&& String nickname = userInfo.getUserName();&&&&&&&&&&&&&&& log.i(&LoginCallback:onLoginResult:AccessToken=%s,LeGameUid==%s,NickName=%s&, accessToken, userId, nickname);&&&&&&&&&&&&&&& displayToast(getApplicationContext(), &登录成功\n& + &AccessToken:&&&&&&&&&&&&&&&&&&&&&&&& + accessToken + &\nuserId:& + userId&&&&&&&&&&&&&&&&&&&&&&& + &\nNickName:& + nickname);&&&&&&&&&&& } else {&&&&&&&&&&&&&&& log.i(&LoginCallback:Login Failed&);&&&&&&&&&&&&&&& displayToast(getApplicationContext(), &登录失败&);&&&&&&&&&&& }&&&&&&& }&&&&&&& @Override&&&&&&& public void onLoginFailure(int errorCode, String errorMsg) {&&&&&&&&&&& log.i(&LoginCallback:onLoginFailure&);&&&&&&&&&&& displayToast(getApplicationContext(), &登录失败,错误代码:& + errorCode + &错误描述:& + errorMsg);&&&&&&& }&&&&&&& @Override&&&&&&& public void onLoginCancel() {&&&&&&&&&&& log.i(&LoginCallback:onLoginCancel&);&&&&&&&&&&& displayToast(getApplicationContext(), &取消登录&);&&&&&&& }&&& };
返回授权的用户信息(HashMap&String, Object&类型存储,具体HashMap中的字段请参照下表):
授权失败,玩家取消授权或者取消超级手机账号登录:返回null
userInfo具体用户信息如下表:
授权账户的乐视id
授权账户的乐视账号昵称
access_token
授权access token
Ce80jkjkjldsfeweokokmmsdfhj#$%
file_300*300
授权账户的300*300头像
/user//635024.
file_200*200
授权账户的200*200头像
/user//635029.L.jpg
file_70*70
授权账户的70*70头像
/user//635029.M.
file_50*50
授权账户的50*50头像
/user//635029.S.
3.账号切换(必接)
游戏方需在游戏功能模块,游戏内显眼位置,添加账号切换入口(如账号切换按钮),让玩家进行账号切换。
3.2.切换流程
1)客户端调用乐视手游SDK账号切换接口进行账号切换;
2)调出乐视账号切换界面,玩家进行切换账号操作;
3)乐视手游SDK与乐视账号服务端进行交互,校验用户信息及授权信息,返回登录结果;
4)乐视手游SDK将登录结果,同步回调给应用客户端。
3.3.详细描述
void login(Activity activity , LoginCallback callback , boolean&& isSwitchAccounts)
当前所在Activity实例
LoginCallback
账号登录回调接口
isSwitchAccounts
默认为true
调起账号切换界面,切换账号后回调切换结果。
使用范例:
// false表示直接登录,不切换账号mLeGameSDK.login(this , loginCallback , true);
账号信息回调,具体请看前文接口
4.支付接口(必接)
4.1.支付流程
乐视手游SDK支付流程图
(1) 构造订单数据
客户端根据乐视手游SDK支付模块的接口规则,通过程序生成要传输给乐视手游SDK的数据集合。
(2) 发送请求数据
把构造完成的数据集合传递给乐视手游SDK。
(3) 乐视手游SDK对请求数据进行处理
乐视手游SDK将请求数据,根据业务规则包装后传递给乐视手游SDK支付服务端,服务端得到这些集合后,会先进行安全校验等验证,验证通过后便会处理完成这次发送过来的数据请求。
(4) 返回处理的结果数据
对于处理完成的交易,乐视会以两种方式把数据分别反馈给商户应用和商户服务器。
在客户端,SDK客户端直接把处理的数据结果同步给商户客户端;
(5) 对获取的返回结果数据进行处理
商户在收到SDK客户端的同步回调,及服务端异步通知回调,获得支付结果数据后,可以结合商户自身业务逻辑进行数据处理(如:订单更新、自动充值到会员账号中等);
同步通知结果需结合服务端异步通知回调,来确定支付最终的支付结果。
4.2.&&&&& 详细描述
void pay(Activity activity , LePayInfo&& tradeinfo, PayCallback callback)
注意:此接口必须主线程调用
当前所在Activity实例
支付Bean参数
PayCallback
支付回调接口
LePayInfo参数:
类型/最大长度
letv_user_id
乐视集团用户id
乐视集团用户id
letv_user_access_token
用户授权token
用户授权token ,账号登录成功,并授权后,返回授权token。
notify_url
接收支付结果异步通知的地址
String 200
支付成功后,支付平台服务端通过此url,异步通知cp支付结果。
cooperator_trade_no
交易流水号
cp自定义订单号,每次调用接口传递流水号,在商户系统业务线或应用下唯一。
正有理数,不允许传递负数。精确到分。 不超过8位的数字。非整数时用小数点分割。小数点前最大6位,小数点后最大2位
pay_expire
交易自动关闭时间
交易自动关闭时间,单位为分钟。默认值21600。
product_id
游戏方自己定义
product_name
String 100
product_desc
String 100
不能为null和“”
商品描述,当前版本SDK没有商品数量接口,所以可以在这里定义商品数量的逻辑,由CP自己决定,具体可参见demo工程
填入“RMB”
extra_info
cp自定义参数
String 160
cp自定义参数,会在异步回调参数里原样返回
接口范例:
LePayInfo payInfo = new LePayInfo();payInfo.setLetv_user_access_token(access_token);payInfo.setLetv_user_id(letv_uid);// 乐视集团用户idpayInfo.setNotify_url(notify_url_edt.getText().toString());// 支付结果回调地址payInfo.setCooperator_order_no(RandomUtil.getRandom());// 商户订单号,生成随机数,由cp定义,唯一;payInfo.setPrice(product_price_edt.getText().toString());// 产品价格payInfo.setProduct_name(product_name_edt.getText().toString());// 商品名称payInfo.setProduct_desc(product_desc_edt.getText().toString());// 商品描述payInfo.setPay_expire(pay_expire_edt.getText().toString());// 支付结束期限payInfo.setProduct_id(product_id_edt.getText().toString());// 商品idpayInfo.setCurrency(currency_edt.getText().toString());// 货币种类payInfo.setExtro_info(extra_info_edt.getText().toString());//cp自定义参数mLeGameSDK.pay(GameActivity.this, payInfo, payCallback);//发起支付
支付回调接口PayCallback示例:
private PayCallback payCallback = new PayCallback() {&&&&&& @Override&&&&&& public void onPayResult(String status, String errorMessage) {&&&&&&&&&&&&& if (status.equals(&SUCCESS&)) {&&&&&&&&&&&&&&&&&&&&&&&&&&& displayToast(getApplicationContext(), &支付成功,订单信息如下:\n& + errorMessage);&&&&&&&&&&&&&&&&&&&& } else if (status.equals(&FAILT&)) {&&&&&&&&&&&&&&&&&&&&&&&&&&& displayToast(getApplicationContext(), &支付失败,失败原因&&&& + errorMessage);&&&&&&&&&&&&&&&&&&&& } else if (status.equals(&PAYED&)) {&&&&&&&&&&&&&&&&&&&&&&&&&&& displayToast(getApplicationContext(), &已经支付,订单信息如下:\n& + errorMessage);&&&&&&&&&&&&&&&&&&&& } else if (status.equals(&WAITTING&)) {&&&&&&&&&&&&&&&&&&&&&&&&&&& displayToast(getApplicationContext(), &支付等待中,具体信息如下&&&& + errorMessage);&&&&&&&&&&&&&&&&&&&& } else if (status.equals(&NONETWORK&)) {&&&&&&&&&&&&&&&&&&&&&&&&&&& displayToast(getApplicationContext(), &无法支付,请检查网络&&&& + errorMessage);&&&&&&&&&&&&&&&&&&&& } else if (status.equals(&NONE&)) {&&&&&&&&&&&&&&&&&&&&&&&&&&& displayToast(getApplicationContext(), &支付失败,原因未知:\n& + errorMessage);&&&&&&&&&&&&&&&&&&&& } else if (status.equals(&CANCEL&)) {&&&&&&&&&&&&&&&&&&&&&&&&&&& displayToast(getApplicationContext(), &取消支付,具体信息&&&& + errorMessage);&&&&&&&&&&&&&&&&&&&& } else if (status.equals(&COINLOCKUSER&)) {&&&&&&&&&&&&&&&&&&&&&&&&&&& displayToast(getApplicationContext(), &用户游戏币支付受限&&&& + errorMessage);&&&&&&&&&&&&&&&&&&&& } else {&&&&&&&&&&&&&&&&&&&&&&&&&&& displayToast(getApplicationContext(), &出现未知情况&);&&&&&&&&&&&&&&&&&&&& }&&& &}};
同步回调参数:
out_trade_no
乐视平台流水号
lepay_order_no
支付平台流水号
cooperator_order_no
cp自定义订单号
乐视用户唯一标识
product_id
商品id,原样返回
product_name
支付结果status定义
已经完成支付
COINLOCKUSER
支付账号异常
结果信息errorMessage(部分,以实际情况为准)如下:
TRADE_NOT_ALLOWED_PAY
不允许支付
ILLEGAL_SIGN
签名不正确
ILLEGAL_ENCRYPT
加密不正确
ILLEGAL_USER
用户ID不正确
ILLEGAL_EXTERFACE
接口配置不正确
PARTNER_PROTOCOL_INVALID
商户协议无效
ILLEGAL_ARGUMENT
输入参数有错误,非空参数为空 等
EXCEED_LIMIT
RETRY_LIMIT
重试次数超限
CUSTOMER_BALANCE_NOT_ENOUGH
用户余额不足
ILLEGAL_CUSTOMER
验证用户信息无效
CUSTOMER_NOT_AVAILABLE
用户账户暂时不可用
CUSTOMER_NOT_EXIST
用户不存在
SYSTEM_ERROR
系统错误(其他情况可以认为系统错误)
ILLEGAL_TIMESTAMP
请求参数时间戳已过期
TRADE_PARAM_NOT_MATCH
该笔交易信息与原先不一致
ILLEGAL_TOKEN
Access_token无效或者过期
5.生命周期接口(必接)
5.1.onCreate
在游戏的Activity的onCreate方法中调用;
此接口包含游戏更新功能,如需此功能,请在回调中的onExitApplication方法中,进行游戏资源回收的操作,然后关闭游戏;
具体请咨询运营和技术支持人员。
void onCreate(Activity activity, ActionCallBack actionCallBack)
参数:参数
当前activity的实例
actionCallBack
actionCallBack初始化回调对象
leGameSDK.onCreate(this, new LeGameSDK.ActionCallBack() {@Overridepublic void onExitApplication() {finish();}});
5.2.onResume
在游戏的主Activity的onResume生命周期方法中调用该接口;
使用范例:
@Overrideprotected void onResume() {super.onResume();Log.i(TAG, &===onResume is called===&);mLeGameSDK.resume();&&&&&& }
5.3.onPause
在游戏的Activity的onPause生命周期方法中调用该接口;
使用范例:
@Overrideprotected void onPause() {super.onPause();Log.i(TAG, &===onPause is called===&);mLeGameSDK.pause();&&&&&& }
5.4.onDestroy
在游戏的Activity的onDestroy声明周期方法中调用此接口;
@Overrideprotected void onDestroy() {super.onDestroy();leGameSDK.onDestory(this);}
6.退出接口(必接)
6.1.退出逻辑
在游戏退出时需要调用此接口,以便后续的内存释放等操作,游戏可以在退出回调中做游戏资源的回收等操作。
6.2.详细描述
void exit(Activity activity , ExitCallback callback)
当前所在Activity实例
ExitCallback
退出回调对象
使用范例:
public void onBackPressed() {&&&&&&&&&&&&& Log.i(TAG, &===onBackPressed is called&);&&&&&&&&&&&&& mLeGameSDK.exit(this , new ExitCallback() {&&&&&&&&&&&&&&&&&&&& @Override&&&&&&&&&&&&&&&&&&&& public void onSdkExitConfirmed() {&&&&&&&&&&&&&&&&&&&&&&&&&&& Log.i(TAG, &===onSdkExitConfirmed is called===&);// 确认退出游戏,在此作游戏退出的逻辑,如游戏资源回收等。&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&& @Override&&&&&&&&&&&&&&&&&&&& public void onSdkExitCanceled() {&&&&&&&&&&&&&&&&&&&&&&&&&&& Log.i(TAG, &===onSdkExitCanceled is called===&);&&&&&&&&&&&&&&&&&&&&&&&&&&& // 取消退出游戏&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&& });&&&&&& }
【手游SDK服务器端-技术接入】
1、发货通知接口(必须接入)
接口地址:在SDK端发起支付时将notify_url作为内部支付Bean参数传递
接口说明:CP配置的用于接收支付成功信息和发货通知的回调接口
http请求方式:GET
注:商户需要提供一个http协议的接口,包含在支付请求参数里,即notify_url。乐视服务器在支付成功后,会以GET方式调用notify_url,以key,value数据格式传输支付结果(示例:a=1&b=2),具体收到的参数和结果以实际收到的为准。
是否可以为空
应用所属AppId
乐视平台分配的应用参数
lepay_order_no
乐视支付平台流水号
由乐视支付平台生成
letv_user_id
乐视用户id
out_trade_no
支付sdk订单号
与cp订单号对应
product_id
cp方商品id
注意null要转换为 ””,并确保无乱码
trade_result
取值“TRADE_SUCCESS”
版本号:2.0
cooperator_order_no
cp方支付订单号
extra_info
cp自定义信息
cp自定义参数
original_price
商品原始价格
标识商品的原始金额,可以对比original_price和price的值,如果相同则表示未使用卡券,如果原金额大,则表示使用了卡券。
响应参数说明:
处理成功,支付平台系统收到此结果后不再进行后续通知
fail 或其它字符
处理不成功,支付平台会不断重发通知,一直达到上限
支付回调回告参数,请严格按照上述要求返回,不要更改!!!
2、 &&& 商户签名规则:
备注:签名为动态签名,即签名字段可能不固定,只需按要求拼接签名串,然后验签即可,请知悉!
HTTP请求中传递的所有参数(sign除外,这个参数不参与验签,参数值不做encode),按照参数名称字符升序的顺序串联起来,然后加上商户通信密钥的内容,进行MD5 &32位运算,摘要结果统一转为小写字符,形成的摘要字符串即为签名结果。MD5 签名计算公式: sign = &Md5(原字符串&key=商户密钥),如:
收到的回调请求报文先做decode,然后去除url:
app_id=229700&lepay_order_no=4961&letv_user_id=&out_trade_no=&pay_time= & 19:21:53&price=0.01&product_id=8888&sign=e159fd56b134c08b&sign_type=MD5&trade_result=TRADE_SUCCESS&version=2.0&cooperator_order_no=&extra_info=测试自定义参数&original_price=0.01
去除sign后,按照规则拼接原串,然后验证签名:
app_id=229700&cooperator_order_no=&extra_info=测试自定义参数&lepay_order_no=4961&letv_user_id=&original_price=0.01&out_trade_no=&pay_time= & 19:21:53&price=0.01&product_id=8888&sign_type=MD5&trade_result=TRADE_SUCCESS&version=2.0&key=09f22dfaaeeb01
签名的结果为:e159fd56b134c08b
3、回调服务端IP:
IP:36.110.219.8&& 36.110.219.9&& 111.206.212.57&& 111.206.212.155请按照支付接入流程步骤,进行注册支付;请猛戳→Android支付接入流程
同步沙箱成功后再进行支付联调
进入支付结算,分区配置页面,添加新分区,分区ID使用数字即可,分区名称游戏自定义。
登录支付结算页面,分区配置添加回调接口;每一个分区对应一个回调地址,多个分区可以使用相同的回调地址。回调地址ID和名称游戏自定义即可,仅用于区分配置的回调;接口URL必须为腾讯内网IP,端口必须为9001。
目前支付接入只有游戏币托管模式。
玩家充值购买虚拟货币,在游戏内消耗虚拟货币购买道具和服务。这种模式叫游戏币充值模式。这个虚拟货币都必须托管在腾讯的账户体系内。
通过客户端SDK进行充值,通过支付API完成虚拟货币的查询,扣费和退款。
回调地址不是一定要使用的;
回调通知接口是充值成功后支付服务端会向该接口异步发送充值游戏币是否成功的消息。
因为是异步发送充值是否成功的通知,不具备时效性,不能作为开发者判断用户充值是否成功的依据,所以该接口不是一定要使用的。
标准的流程是客户端收到充值成功回调以后主动向游戏服务端发起查询余额接口,游戏服务端调用支付后台接口得到结果,在返回给客户端,显示给用户。
联调工具:提供在沙箱联调测试时使用的资源和工具,“充值Q币”,“充值游戏币”,“Q币余额查询”,“生成测试Q卡”和“生成测试Mpay充值卡”
登录,进入管理中心-支付结算页面查看:
移动端按充值来结算。
offerid就是应用支付ID
涉及支付的接口都是用支付ID
1).安卓应用offerid = 手Qappid
2).IOS应用请先联系腾讯产品PM注册IOS相关信息后生成
3).安卓手Q和安卓微信的支付ID都是手Qappid和key
4).IOS手Q和IOS微信的支付ID都是IOS的支付ID和key
pf和pfkey通过MSDK客户端接口WGGetPf()和WGGetPfKey() 获取
支付接口的参数appid都是填应用支付ID,就是offerid
因为支付ID=手Qappid,所以微信登录态也填手Qappid,计算sig使用的appkey也是用手Qappkey.
未调用支付的初始化接口导致crash。
按照demo中初始化方式调用,如下图:
子线程中调用支付出错
支付demo默认游戏是在主线程中调用,如游戏需要在子线程中调用支付接口,请遵循android中子线程调用的规则,先Looper.prepare(),然后调用支付
游戏打包的时候未将TenpayPlugin4Game工程的libs目录下的so库合入,导致跳转到财付通支付时crash,请游戏加入下图的so库重新打包(如果游戏的libs目录存在多个cpu架构的文件夹,那就把libcftutils.so都拷贝一份)
如果该目录下没有libcftutils.so文件,请在解压后的TenpayPlugin4Gmae_libs文件夹内查找。
请检查调用支付接口之前是否注册了回调信息。支付回调的注册和接口的调用必须是成对出现,请游戏成对调用
微信登录的微信号需绑定银行卡才可以显示快捷支付
当游戏选择定额不可改的充值方式时,购买金额和充值卡的面值不等会有这个报错提示;
游戏服务端验证pay_token是否有效,在pay_token失效的时候,由客户端重新拉取授
权页面刷新pay_token即可。
1).是否同步沙箱成功
2).充值是否到账
3).充值的分区是否有配置回调地址
4).Ip需使用内网ip
5).以上检查没有问题,请联系企业QQ :
确认充值的分区和查询的分区一致,分区ID可能弄错,充值在1分区,查询到2分区,导致查询余额为0。
开发商使用开发者帐号或者协作者帐号登录管理中心支付结算页面,左侧最下放客服中心进入充值查询页面。根据登录帐号,充值时间进行查询。
登录帐号:手Q登录使用QQ号,微信登录使用openid;
充值时间设置不要跨月查询,尽量缩短时间范围查询;
支持三个月内的充值记录查询,数据两小时延迟。
请在联调发布页面,同步沙箱成功后自动生成赠送活动ID和赠送礼包ID
提交支付审核
测试环境完成测试确认都没有问题后,在管理中心,支付结算页面,联调发布中提交支付审批。审批通过后,即可切换支付现网环境。
MSDK客户端域名切换正式环境:
客户端调用setEnv方法,设置成release版本
支付api使用正式环境的地址:
错误码解释:该应用没有接入权限
解决方案:
1).尚未注册支付导致,请按照支付接入流程注册支付,同步沙箱成功后再进行支付联调。
2).充值接口使用错误,游戏币模式不能使用道具直购接口。
3). 服务端接口appid使用错误;特别注意的是微信支付后台接口使用的也是手Qappid。
错误码解释:登录过期,请重新登录
解决方案:
1).用户在其他设备登录了游戏,把之前的登录态刷新了
2).游戏自己没有取到最新的登录态
3).以上检查都没有问题,请联系企业QQ :
错误码解释:登录过期,请重新登录
解决方案:
1).请检查cookie参数session_id和session_type的值是否正确
手Q:session_id=session_type=kp_actoken
微信:session_id=hy_session_type=wc_actoken
2).以上检查都没有问题,请联系企业QQ :
错误码解释:登录过期,请重新登录
解决方案:
1).检查openid, openkey参数值
2).检查支付ID的设置
3).检查环境配置是否一致,测试环境和正式环境配置弄混。
4).多处登录,刷新了之前取的登录态,导致原来保存的token失效。
5).用户token过期,需重新登录。
6).请求时间戳和支付服务器时间戳时间差别太大(15min以上)。
7).以上检查没有问题,请联系系企业QQ :
错误码解释:登录过期,请重新登录
解决方案:
1).请检查openkey参数,
手Q登录openkey传入paytoken
微信登录传入accesstoken
2).以上检查没有问题,请联系系企业QQ :
错误码解释:请求参数错误,appid错误
处理方案:
1). 应用ID填错,请在应用基本信息核对应用支付ID。
2). 服务端接口报错appid错误,请检查cookie参数传递是否正确。
3). 以上检查没有问题,请联系企业QQ:
错误码解释:sig error,sig计算错误
解决方案:
1).首先请使用签名验证工具来计算签名:
sig和程序计算的是否一致;
2).请使用 GET请求方式;
3).cookie格式出错,注意cookie格式是key=key2=value2;
4). sig值在传输之前,需要进行urlencode。如果sig里边含有’=‘等特殊字符,没有
urlencode会出错。除了sig以外的参数不需要urlencode。
5).以上确认没有问题请联系企业QQ:。
错误码解释:请求参数错误
解决方案:
1).参数错误,请开发者检查zoneid、pf、pfkey参数传入是否正确;其中zoneid即分区配置的分区ID,pf、pfkey均为MSDK登录获取;
2).客户端offerid是否配置
3). pf参数中的系统运行平台描述错误,例如iap写成android,会导致pfkey报错
4). pfkey参数名称大小写请开发商注意
5).zoneid填写错误,分区ID配置后未进行同步沙箱或者现网操作
6).分区配置了角色,但是zoneid又没有传角色
7).参数检查没有问题请及时联系企业QQ:
处理方案:请查看支付的手机是否设置了代理,或者手机时间是否不正确。
错误码解释:对不起,交易流水不存在
处理方案:客户端和服务端支付环境不统一,一个使用了沙箱环境,另一个使用了现网环境。
错误码解释:应用配置信息未同步
解决方案:同步沙箱或者现网失败导致,请重新同步沙箱或者现网操作。
内部错误,请联系企业QQ:。
错误码解释:调用扣除游戏币接口/mpay/pay_m,请求参数出现错误
解决方案:扣除游戏币接口请求参数amt不能为0,请检查参数。
错误码解释:调用扣除游戏币接口/mpay/pay_m,请求参数出现错误
解决方案:扣除游戏币接口余额不足,建议游戏侧扣除之前查询余额,确认余额足够再扣除。
错误码解释:发货cgi返回格式错误
请开发者检查回调地址返回是否是{"msg":"OK","ret":0}格式,其中msg不能是空串,ret必须是数字。
错误码解释:内部错误,没有配置该渠道
处理建议:
这个错误是在沙箱环境,客户端充值游戏币使用Q点渠道,Q点余额不足,点击充值Q点报的;沙箱环境下该渠道是关闭的,为了防止开发商误操作充值在沙箱,请开发者在现网环境下调试该渠道。
错误码解释:内部错误
处理建议:
请开发者将充值游戏币接口内营销活动类型和营销活动号两个参数注释掉
老版本的demo例子里面带的营销活动参数,删掉即可,新版本已经删掉。
最新IAP版支付wiki→→IAP支付wiki
1).联系产品PM,在RDM上申请苹果相关信息,appleid、bundleid、测试证书和物品信息
2).请按照支付接入流程步骤,进行注册支付;请猛戳→IAP支付接入流程
3).注册支付成功后,生成的应用支付ID即为offerid,即IOS专用支付ID
4).同步沙箱成功后再进行支付联调&p&
&p&1).由产品PM在RDM申请到的测试账号即可用于沙箱测试,
2).请开发商注意,沙箱测试账号不能用于已经上架app store的正式包。
1).只有被苹果审核通过,在app stroe下载的包才是苹果正式环境,
2).游戏没有通过苹果审核,连的都是苹果沙箱。开发商在支付沙箱环境调通后,切换到支付的正式环境,这时苹果还是测试环境,
3).提交苹果审批前,一定要确保支付环境用的是正式的支付环境,避免把连接沙箱支付环境的版本提交给苹果审批
1).由产品PM在RDM注册过的物品信息,请填写在管理中心物品信息内
2).物品ID=productid;注意大小写敏感
3).游戏币数量填写该物品对应游戏币个数
4).物品单价填写在苹果登记的该物品价格
由产品PM在RDM申请的测试证书,带有dev的是测试证书,请开发商注意。
请按照本文档1.2章节步骤生成offerid,并配置在工程的info
1).程序启动后,立刻设置environment;
2).获取登陆态后,立刻register;
3).以上两个不用重复调用;
4).pay之前,不需要重复调用1和2
1).RDM上,是否将应用的In-App Purchase功能打开:在Certificates, Identifiers & Profiles中查找,确认RDM管理员帮你申请app-id时,打开了In-App Purchase选项;
2).RDM上的应用状态,请确认是否为Waiting For Upload;
3).千万确定你的工程文件中制定的bundle identifier和RDM中申请的app id是一致的, 必须一字不差,大小写敏感;
4).检查你用来测试的iOS系统版本是否过低,一般目前已知的可以支持的版本,在iOS5.0以上;
5).在RDM上检查配置的商品是否在Ready to Submit及其以后的状态,支持的其他状态还有 Submit for Review,Waiting for Review,Waiting for Upload,In Review,Approved。
6).检查你所请求的productId是否与在RDM上配置的id一致,必须一字不差,大小写敏感;
7).你是否完善了iTC账户上的银行卡信息、税务信息以及联系人信息等:这一项,一般用公司 的RDM来申请的,不会遇到这个问题,但是也不排除公司新申请的开发者账户还没有维护这 个信息,请找RDM管理员确认(另外,这一项配置后,可能要数小时才能生效,1小时到24 小时不等,请耐心等待);
8).是否刚在RDM中添加的productId?有时候也会遇到要等一会才能生效的情况;
9).是否是越狱设备?越狱设备大多数已经将app store的购买请求截流在本地,如果设备越狱, 请换一台设备测试;
10).实在没办法,把iphone上的app删掉,把xcode的编译缓存清掉,重新debug看看。
1). 网络问题(一般多换几个网络,不太可能都出现,比如说,freewifi出问题,可以尝试更换成3G网络;
2). 未经苹果审核正式发布的测试版本,没用使用开发者帐号下的测试帐号进行测试。(首先检 测手机App Store上是否已经登录了苹果帐号,如果有先进行注销再登录对应开发者帐号下的测试帐号)
3). 越狱的手机,也会连不上;
4). 开发环境下,用mac电脑上的模拟器,一般情况下也连不上iTunes Store,不建议在模拟器上调试midas iap 支付sdk。
5).如果没有,还是一直连不上,可以定位是苹果沙箱不稳定,请稍后再进行尝试
这种情况是因为之前有一笔同等数量的交易未完成导致票据没有Finish,当下次登录 的时候苹果会通知midas进行补发。如还未补发按以下步骤检查:
1). register接口在登录成功和重新登录成功的时候调用一次即可
2). dipose接口在游戏release自己的时候调用一次,其他地方不能调用。
3). 支付的时候不能锁定屏幕
4). payfinish回调表示苹果扣费成功但还没有发货
5). distrbutegood接口表示发货成功,这个时候刷新余额
6). 设置支付环境 在 register之前 如果确定都没有问题先kill掉,然后重新拉起登录 ,应该就会进行补发.如果还是没有补 发,这个基本就确定是苹果的沙箱不稳定造成建议更换测试账号进行测试
因为C和Objective-C混编的时候,Extern C函数中不能新建IAPHelper、Objec所以需要 在Object-C 内将所有初始化封装好。如果不是该原因请联系midas
苹果后台物品登记Type值不自动续费选subscribe, 自动续费选auto renewable subscribe; 程序中producttype参数值不自动续费设置“4”,自动续费设置“2”。
包月的商品都有一个key必须配置在我们的后台,出现该问题请联系企业QQ进行检查
把支付的framework包删掉引用,重新引入
调用赠送接口和扣费接口时,如果同一个账户同一时间对账户进行操作会引发时间搓冲突。 建议不要在同一时间多次调用赠送接口、扣费接口。
未上线的应用无法使用现网环境的apple id进行支付测试,需要使用开发者帐号下的测试帐号进行 测试。该测试帐号需要找itc管理员去申请或索要。
A:修改续费类型需要:
1)、在RDM上重新申请新的product id 并选择对应的类型(Auto-Renewable Subscription 表示自动续费包月, Non-Renewing Subscription 表示非自动续费包月)。
2)、在cpay上将对应offerid下登记的物品信息更改成,并在更改后同步沙箱现网数据。
由于苹果的服务器在美国,当玩家通过appel帐号进行支付后绑定邮箱会收到相应的扣费通知, 这里需要注意的是该通知的时间为美国时间。 我们查询充值流水的时候需要进行时差的转换。
游客模式是一种不使用任何帐号体系(QQ帐号或微信帐号)登录游戏的方式。游客模式下MSDK不提供关系链,好友分享等和帐号体系相关的功能。
但是提供支付功能。MSDK会给每个使用游客模式登录的 玩家分配一个和移动设备绑定的唯一ID(guestID)。
guestID 根据appid和设备ID生成。
1.游客模式支付接口
游客模式下支付接口不变。
2.游客模式客户端参数变化
sessionId ="hy_gameid"
sessionType ="st_dummy"
openid = guestID的值
openKey ="openkey"
注这里固定传openkey字符串
3.游客模式服务端参数变化
Cookie 参数:
session_id="hy_gameid";session_type="st_dummy"
支付API参数
openid=guestID的值
openkey="openkey"
注这里固定传"openkey" 字符串
pay_token=accesstoken
游戏服务端验证pay_token是否有效,在pay_token失效的时候,由客户端重新拉取授
权页面刷新pay_token即可。
1).是否同步沙箱成功
2).充值是否到账
3).充值的分区是否有配置回调地址
4).Ip需使用内网ip
5).以上检查没有问题,请联系企业QQ :
确认充值的分区和查询的分区一致,分区ID可能弄错,充值在1分区,查询到2分区,导致查询余额为0。
开发商使用开发者帐号或者协作者帐号登录管理中心支付结算页面,左侧最下放客服中心进入充值查询页面。根据登录帐号,充值时间进行查询。
登录帐号:手Q登录使用QQ号,微信登录使用openid;
充值时间设置不要跨月查询,尽量缩短时间范围查询;
支持三个月内的充值记录查询,数据两小时延迟。
请在联调发布页面,同步沙箱成功后自动生成赠送活动ID和赠送礼包ID
提交支付审核
测试环境完成测试确认都没有问题后,在管理中心,支付结算页面,联调发布中提交支付审批。审批通过后,即可切换支付现网环境。
MSDK客户端域名切换正式环境:
客户端调用setEnv方法,设置成release版本
支付api使用正式环境的地址:
错误码解释:该应用没有接入权限
解决方案:
1.尚未注册支付导致,请按照IAP支付接入流程注册支付,同步沙箱成功后再进行支付联调。
2.服务端接口appid使用错误;请使用IAP专用支付ID。
错误码解释:登录过期,请重新登录
解决方案:
1).用户在其他设备登录了游戏,把之前的登录态刷新了
2).游戏自己没有取到最新的登录态
3).以上检查都没有问题,请联系企业QQ :
错误码解释:登录过期,请重新登录
解决方案:
1.请检查cookie参数session_id和session_type的值是否正确
手Q:session_id=session_type=kp_actoken
微信:session_id=hy_session_type=wc_actoken
游客:session_id=hy_session_type=st_dummy
2.以上检查都没有问题,请联系企业QQ :
错误码解释:登录过期,请重新登录
解决方案:
1).检查openid, openkey参数值
2).检查支付ID的设置
3).检查环境配置是否一致,测试环境和正式环境配置弄混。
4).多处登录,刷新了之前取的登录态,导致原来保存的token失效。
5).用户token过期,需重新登录。
6).请求时间戳和支付服务器时间戳时间差别太大(15min以上)。
7).以上检查没有问题,请联系系企业QQ :
错误码解释:登录过期,请重新登录
解决方案:
1.请检查openkey参数,
手Q登录openkey传入paytoken
微信登录传入accesstoken
游客登录传入openkey固定字符串
2.以上检查没有问题,请联系系企业QQ :
错误码解释:请求参数错误,appid错误
处理方案:
1). 应用ID填错,请在应用基本信息核对应用支付ID。
2). 服务端接口报错appid错误,请检查cookie参数传递是否正确。
3). 以上检查没有问题,请联系企业QQ:
错误码解释:sig error,sig计算错误
解决方案:
1.首先请使用签名验证工具来计算签名:
sig和程序计算的是否一致;
2.请使用 GET请求方式;
3.cookie格式出错,注意cookie格式是key=key2=value2;
4. sig值在传输之前,需要进行urlencode。如果sig里边含有’=‘等特殊字符,没有
urlencode会出错。除了sig以外的参数不需要urlencode。
5.以上确认没有问题请联系企业QQ:。
错误码解释:请求参数错误
解决方案:
1.参数错误,请开发者检查zoneid、pf、pfkey参数传入是否正确;其中zoneid即分区配置的分区ID,pf、pfkey均为MSDK登录获取;
2.客户端offerid是否配置
3. pf参数中的系统运行平台描述错误,例如iap写成android,会导致pfkey报错
4. pfkey参数名称大小写请开发商注意
5.zoneid填写错误,分区ID配置后未进行同步沙箱或者现网操作
6.分区配置了角色,但是zoneid又没有传角色
7.参数检查没有问题请及时联系企业QQ:
错误码解释:对不起,交易流水不存在
处理方案:客户端和服务端支付环境不统一,一个使用了沙箱环境,另一个使用了现网环境。
错误码解释:应用配置信息未同步
解决方案:同步沙箱或者现网失败导致,请重新同步沙箱或者现网操作。
错误码解释:调用扣除游戏币接口/mpay/pay_m,请求参数出现错误
解决方案:扣除游戏币接口请求参数amt不能为0,请检查参数。
错误码解释:调用扣除游戏币接口/mpay/pay_m,请求参数出现错误
解决方案:扣除游戏币接口余额不足,建议游戏侧扣除之前查询余额,确认余额足够再扣除。}

我要回帖

更多关于 集结号游戏币花呗支付 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信