添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
悲伤的大熊猫  ·  ssh -p xxxx ...·  3 周前    · 
直爽的黄花菜  ·  typescript ...·  1 月前    · 
完美的青蛙  ·  Search by category ...·  3 月前    · 

常见技术问题

一、安全支付插件

1.支付插件反复弹出安装界面

游戏接入的 Amigo_Play.apk 版本低于SDK包中Amigo_Play.apk版本。

SDK升级或接入时须同时替换SDK包中libs/com.gionee.gsp.jar和assets/gionee/Amigo_Play.apk。

2.出现“为了获得更安全和便捷的支付体验,请升级支付服务”,“下载”字样

Amigo_Play.apk没有打包到游戏中。

将游戏apk后缀改为zip,查看压缩包assets/gionee/目录下是否有Amigo_Play.apk。若无,请游戏确保在打包时将插件apk打包进去。

3.支付插件不静默安装

支付插件静默安装须满足:
a.游戏apk已用金立签名;
b.使用金立手机;
c.申请了权限
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />。
d.Amigo_Play.apk放在以下目录下

开发者只需关注c、d两点。因为开发者在上传apk后,Amigo后台会自动给apk签名。

二、平台初始化

1.提示初始化参数错误

请检查平台初始化函数APIKey是否为后台申请的值。

三、账号登录

1.Token验证成功什么状态

验证接口返回的数据是json格式,如果里面不包含“r”参数或“r”值为0,则认为验证成功,否则验证失败。

2.AmigoToken验证返回错误码1010

"r":"1010","err":"tick formatis error " ,

AmigoToken格式错误。请将获取的Token不做任何处理,直接作为账号安全验证请求数据的body。

"err":"notick": 没有提供AmigoToken
"err":"must offer id": 必须提供id参数
"err":"must offerts": 必须提供ts参数
"err":"must offernonce": 必须提供nonce参数
"err":"must offermac": 必须提供mac参数
"err":"must offerAuthorization": 必须提供Authorization头

3.AmigoToken验证返回错误码1011

a."r":"1011","err":"app sig verify fail"

游戏端与Amigo服务器生成的签名不一致,请验证mac签名算法是否正确。

1)确认secretKey 使用申请的值

2)确认AmigoToken签名是否正确方法:
使用参数:
String host = "id.gionee.com";
String port = "443";
String secretKey = "3990B23BBE6E4A12BEA4D59325E82B28";
String ts = "1411894798";
String nonce = "937DC049";
String method = "POST";
String uri = "/account/verify.do";
得到结果:
IZXHWQtlYfeBley5FXJSOW6Mkzw=

3)确认待签名字符串组装正确,包括ts,nonce,method,uri,host,port。

组装示例:

"1414202175\n

78DFA0D0\n

POST\n

/account/verify.do\n

id.gionee.com\n

443\n

\n"

4)确认传输数据完整性,没有在传输前被截取。可以在传输前加log打印。

5)将验证错误返回的wid字段值给账号服务端开发人员分析。

b."r":"1011","err":"verify app-key fail"

SecretKey不正确,须替换正确的SecretKey

c. "r":"1011","err":"tick is null"

AmigoToken传值为null或AmigoToken严重超时被清理。

须及时传登录成功后返回的toke作参数验证。

d. "r":"1011","err":"greater than maxtick verify times"

不能多次校检,只能验证一次。

e. 其他错误

tick is timeout :生成的AmigoToken超时(5分钟超时)。

appId is different : APIKey不统一

timestamp is different : ts不统一

nonce is different : nonce不统一
tick is timeout: 被验证的tick已经过期

若按以上步骤还是不能定位问题,请开发者提供服务器返回的wid参数给账号服务端开发人员分析。

建议若有相应语言demo,先跑通demo,接入时换相应参数即可

4.登录账号时toast提示“应用不存在”?

请检查是否使用正确的APIKey。

5.启动游戏会弹出两个登陆框?

请确认登录接口在代码中只调用了一次,搜索关键字loginAccount。

6.AmigoToken验证是否必须?

可选,如果游戏注重账号安全须加上此步骤。

7.token验证时收不到回复?

请确认token验证请求已发送成功。

四、支付订单创建

1.创建订单的时候,希望增加自定义字段

创建订单时可在notify_url后面添加?xxx=xxx来传递自定义参数(参数字符要符合url规范,特殊字符需要urlEncode编码),例如: http://www.partner.com/notifyReceiver?param1=value1&param2=value2 。自定义参数将在支付结果通知时通过URL原样传回给你们。

2.创建订单时在notify_url参数后面添加了自定义参数,自定义参数需要参与签名吗?

需要

3.请求创建订单时有一个notify_url,开发者平台也配置了一个支付回调地址,请问到底是以哪一个为准?

notifURL在代码中创建订单时可以设置,也可以后台配置,并以代码设置优先,代码中没有就用后台配置的。所以最好不要在创建订单的时候写死,如果创建订单notify地址写死了,后台配置的就无效了。

4.订单商品名称哪里设置

CP创建订单时的subject参数即为商品名称,需在代码中设置,无后台设置。详情可搜索开发文档“subject”字段。

5.创建支付订单里面的player_id可以自定义么?

创建支付订单所用的player_id不能自定义,必须是登陆成功后获取的playerId。

6.订单号超过32个字符,怎么办?

2.1.7版本将优化增加到64位

7.ASCII升序是什么?参考代码在哪?

ASCII升序即按字母升序排序(如果第一个字母相同,按第二个字母排序,依次类推),代码请参考Amigo_Play_Server_Demo中PayUtil.wrapCreateOrder函数

8.创建订单时返回”请求参数格式错误“

检查参数是否符合文档定义,所有参数都是以字符串类型提交。

a) 所有参数都是字符串类型,特别注意total_fee、deal_price、deliver_type、submit_time、expire_time字段值都需转换为String类型。

b) submit_time、expire_time格式为yyyyMMddHHmmss,即:年月日小时分钟秒20091227091010,且expire_time > submit_time

c)out_order_no 数字、字母及半角的符号“-”、“_”、“|”构成,32个字符以内,要确保订单号的唯一性,不能重复

d) subject 商品名称,32个字符以内,不能含有半角“+”、“&”或特殊字符集

9.创建订单时返回"status":"400010004","description":"签名错误,信息校验失败"

游戏生成签名与Amigo服务器生成签名不一致。

1.核对下签名算法是否有问题。

RSASignature. sign (signContent, privateKey, CharEncoding. UTF_8 );

signContent:

"DDFDAEC3DBF544DD99EB9F508B4299050.011201405280000001元宝201410241522030.01";

privateKey:

"MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJZJoM3tJzf96lejbCsQsCgnMAdLtyvf9ZkflExjEUuQ1O7g+OuWc4ZrvtE+coWZmUt2IjYkws63XAbFt/aMEHu/qerp3g/Mn1Y+tVFVbsME+hqhTVknOtt7kv+ZyVymHXZEBvzlTQXiybUDXkRqvvu+hO/+4BhS6fNmuggYpbTnAgMBAAECgYBhIABOVT+NTgnOzYywYD6YFItTi7k7H6fnZ6M9oqCgx171ams0Ra0vaB6Pt93nPZb2T8hYWXWUhqdwsQLs0SQs9+91881Nu1JE1nPAyeQKWv0t6Ol8BavecvEGUcJPXJ1/zZFU7r+s3pdz7OnQV2b77VhZiLsaQsmrxLPALdeTkQJBAMSxDuQymonH0q9KbMAgZ/c7ZraQhc1erf8eb6ni+3eXoJkJBlYsFmp+zFxo6gfj8N8nl0sV1sD3g2HwcUTOimsCQQDDmpG0uqTmAGJryfZOp8YB3VqhTZfFf1xcXQGNkUsaNXFpLMd5O4haRlL4FiROenVucYd0VU4eZIOi33CkYdZ1AkEAjxxUvWykTIN7o9b+8XuiqZwqy8Kz2A1/hBRdIrroRMeqLi8G0UQauzmu773WKg+LfpKL3jHxo01z5prPj0TIKQJBAJl5BMv2Cf4A3ThPnXd3gg/iewLG28d1N6Wsv9Qw5Olqd1KbdON1R3X1aZIH5XLB+LOwViR77jBAk1xOzpXbwiUCQDX4cj4IWy6brwCFFOkcqY23veDTIB8vXC2Kg//Kv1vUJ41DM82/Ga7fBAqCgTHSow3QlByoMFokAxmkU6Zc5EE=";

得到sign:

K6azhShnDUTCCOUaxWPF2FzxESWRTd2Akm/xQFoJqG+zIG7FpNXGkni8qHEMukSMcfOpeRiD/Mt9eefoyNyA92Iq15zY6iaWv9ZquyuvqEkg5Dkq2JeSv9wTTjcLCuLsNkwumxdYB1pBspUu+gy+v5agKwqpRSEMzt0r5QMj0G8=

2.检查拼装待签名字符串内容signContent格式是否正确。

规则:将参数值按照参数名(不包括sign字段)按字母顺序排序,再将参数值直接连接,拼装待签名内容signContent:

“api_key值”+“deal_price值”+“deliver_type值”+“out_order_no值”+“subject值”+“submit_time值”+“total_fee值”

注意: 拼接的字符串无&连接,只是参数值连接无需参数名。

注意:这个接口是只要传了的参数都要加密。

10.创建订单时商品名参数 subject如果是英文,创建订单成功,如果是中文的话会返回 "status":"400010004","description":"签名错误,信息校验失败"

http请求需设置成utf8 格式。

httpclient可以这样设置
httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");

httpconnection可以这样设置
conn.getOutputStream().write(body.getBytes(CharEncoding.UTF_8));

isr = new InputStreamReader(conn.getInputStream(), CharEncoding.UTF_8);

五、启动收银台

1.代码混淆后无法启动收银台

如果你的apk有代码混淆,请添加以下忽略信息:

-keep public class * extends android.os.IInterface
-keep public class * extends android.os.Binder

-keepclass com.youju.statistics.**{*;}

2.支付窗口在部分非金立手机上无法调起

请先确认只是在部分非金立机型上(手机系统需是Android 4.0.0及以上)无法调起,若出现此问题,请开发者帮忙抓下log并录制下视频给金立同学分析。

3.调用支付时,客户端一直loading

此问题跟网络有关,请开发者帮忙抓下log给金立同学分析。

4.调起收银台,提示“订单不存在”

可能是下面的情况:

  1. 没有成功创建订单,找不到订单信息;
  2. 请求参数与创建的订单不匹配(注意submit_time参数,需要与创建订单提交的一致),找不到已创建的订单信息。

按下面步骤排除:

1、打印服务器创建订单返回的参数,检查游戏的服务器创建订单是否成功;

2、比较启动收银台所用参数值与创建订单时是否一致(包括api_key、out_order_no、submit_time)。

3、确保服务器创建订单成功后才调起客户端收银台。

5.用户连续点击,调起多个支付订单

游戏可以加一个创建订单loading或者控制订单生成间隔。可设置一个时间间隔,在这个时间间隔内使点击不处理任何事情。

6.点击支付窗口外围,支付窗口消失。

sdk目前设计如此,后续版本做调整。

7.在支付窗口界面按home键退出后,再次进入游戏支付窗口消失?

SDK考虑到安全问题,设计如此。后续版本会做调整。

8.账号登录后,进入收银台,还是弹出登录框

1.  必现出现,检查启动收银台的3个参数api_key、out_order_no、submit_time是否传值正确。

字段名

属性

是否必填

说明

api_key

字符串

必填

申请创建该支付订单的APIKey

out_order_no

字符串

必填

商户订单号,与创建支付订单请求时相同

submit_time

字符串

必填

订单提交时间,格式为yyyyMMddHHmmss。 与创建支付订单的“submit_time”字段是同一个值。

2.  概率出现,检查服务器的创建订单号是否成功,成功后才启动收银台

9.支付框弹起后返回,悬浮小图标消失。

新游接入使用了userId做唯一标识,应该是用playerId。

10.第一次启动收银台后直接返回,再次启动收银台,收银台不弹出, 悬浮按钮不显示。 多点几次“Amigo安全插件”无响应?

目前payEnd回调不是在ui线程中完成。游戏需要在ui线程中完成的事情请用handler来处理。

11.调起收银台,提示“订单不存在”

可能是下面的情况:

1没有成功创建订单,找不到订单信息;

2请求参数与创建的订单不匹配(注意submit_time参数,需要与创建订单提交的一致),找不到已创建的订单信息。

按下面步骤排除:

1、打印服务器创建订单返回的参数,检查游戏的服务器创建订单是否成功;

2、比较启动收银台所用参数值与创建订单时是否一致(包括api_key、out_order_no、submit_time)。

3、确保服务器创建订单成功后才调起客户端收银台。

12.悬浮按钮-充值,选择银行卡一键支付方式,选择充值金额然后立即充值,跳转至银行卡界面,再左上角返回,则弹出充值已处理,一直在无限自动查询界面,无法返回游戏。

此问题是易宝支付通道出现问题时,一直查询不到结果,就会轮询约2分钟(1+5+10+30+60),给人感觉是一直在无限查询界面。在2.2.0版本已经做了处理:当这个支付通道出现问题时,仅轮询16秒(1+5+10)后消失。

六、支付结果通知

1.金立后台的订单配置在那里写的?

开发者平台->游戏联运->我的Key->找到 ,自己写notify地址。可随时更改,更改立即生效

2.支付时提示“订单已完成支付!网络信号异常,请联系商户或稍后查询!
Amigo账户充值成功后,没有收到商户“success”字符串返回。
按以下顺序排查:
1.创建订单的服务器notify地址是否通
2.确认游戏服务器收到支付结果通知
3.确认收到支付通知后有返回纯“success”字符串
4.确认返回的纯“success”字符串正确性,无引号,前后无空格、换行符或其他字符
5.开发者提供异常订单号给金立支付服务器同学一起分析。

3.支付结果通知中user_id=null是否正常。
正常,user_id是为兼容老版本而保留,新版本已无作用

4.收到支付结果通知,签名验证不通过
1.确保使用申请的PublicKey
2.检查待验签字符串拼接格式是否正确:
拼接待验签数据规则:按照key的字母升序排序,以“key=value”形式用“&”拼接待验签内容checkContent:
“api_key键=api_key值”+“&”+“close_time键=close_time值”+“&”+“create_time键=create_time值”+“&”+“deal_price键=deal_price值”+“&”+“out_order_no键=out_order_no值”+“&”+“pay_channel键=pay_channel值”+“&”+“submit_time键=submit_time值”+“&”+“user_id键=user_id值”
示例:

api_key=7EBF116B7DC847C4A109F51C858320E4&close_time=20141024182157&create_time=20141024182003&deal_price=0.01&out_order_no=201410241819461369&pay_channel=100&submit_time=20141024182003&user_id=null

3.检查验签算法是否正确

七、其他问题:

1.u3d游戏引擎在登录时报错"gionee/gn_component_config.json找不到"

目前解决办法:将com.gionee.gsp.jar文件解压,把jar包里面assets目录下全部资源复制到项目的assets目录下.

2.金立sdk更新后找不到 logout接口了 ,这正常吗?如何切换账号?

正常,新版此接口已去掉。账号切换使用登录接口

mGnCommplatform.loginAccount(mActivity, Constants. LOGIN_REQUEST_CODE , false ,new IGnUiListener() {

将第三个参数改为false即可实现。

3.demo 的支付 是 真实扣费吗?

是的

4.playerid是32位的么?区分大小写么?

是32位,区分大小写

5.如何升级SDK?

下载最新sdk,下载地址: http://dev.game.gionee.com/help/sdk.html

替换 Amigo_Play.apk及com.gionee.gsp.jar

6.SDK中使用什么签名算法?

AmigoToken验证使用HMAC-SHA1签名

创建订单使用RSA签名

7.游戏中部分字体显示不全?

把现在游戏里面使用的字体打包到apk里面。

8.悬浮按钮-帮组,提问题一栏输入问题内容及信息,点击提交,无任何提交反馈提示

对未上线游戏的反馈,服务器会不做处理,等游戏正式上线后功能会正常。

9.返回商户类型不匹配
单机网游类型弄错了,申请单机参数接入网游SDK

10.在支付的时候提示订单信息不存在
没拿CP订单去请求或者时间错了或者是apiKey错了

11. 支付与创建订单用户不是同一个人
弄错了userId, 仔细照着文档,执行下单流程。下单不要发错参数了。

12魅族某些机型手机调不起支付

需要打开指定位置的权限:应用管理—金立钱包—权限管理—后台管理—允许后台运行

调起收银台,点home键回游戏,游戏一直加载。

按下home键没有回调,下单成功后,关闭对话框,再调起支付,具体参见demo实现。

14.充值ip限制。

42.121.105.125
42.121.105.141

15.下单的时候提示订单已存在。

不要用相同的订单号来请求下单。

16.游戏加了金立签名和金立签名的签名信息如下。

证书指纹:

MD5: B4:97:92:A5:68:7B:64:14:92:E1:0A:29:15:2F:74:54
SHA1: 1B:B8:B4:F4:6E:AF:C2:A0:6A:46:BA:68:FD:8D:E5:43:A5:C6:5C:BD
SHA256: C2:D9:92:C8:A4:CD:A2:EE:D5:5F:69:35:7D:67:59:93:78:78:E9:A0:F0:B6:29:52:4E:88:AA:81:ED:65:F8:02

签名算法名称: SHA1withRSA

版本: 3。

17.微信调不起支付但属于正常情况。

1.微信账号在其它手机登录,被迫下线的这种情况   2.之前其它手机限制支付启动,也调用不了


点击下载