应用宝SDK接入总结
应用宝sdk是众所周知的难接入,经过这次接入发现其接入难点主要在以下三个方面,其一,文档杂乱,部分地方语焉不。其二,微信与手Q部分参数缠连不清,部分出处不明。其三,腾讯技术客服支持不及时、工作应付。下面分别就登录接入、支付接入、易错总结三个方面稍作总结,以便他人参考。
1 登录接入
1.1登录客户端接入
登录接入流程图如下所示:
一般来说,按照登陆文档来一步一步进行操作,登陆相较于支付还是比较容易的。在接入登陆操作期间遇到的主要问题在于onNewIntent接口的调用,按照文档要求在launchActivity的onCreat()和onNewIntent()中必须调用WGPlatform.handleCallback(),否则会造成微信登录无回调。而tivicloudSDK并未实现onNewIntent接口,结果微信登陆收不到回调。解决此问题的补偿方案是需要在WXEntryActivity.java添加如下代码:
@Override
public void onResp(BaseResp resp)
{
Intent intent = new Intent(this, LoginChoice.class);
intent.setFlags(268435456);
intent.addFlags(536870912);
intent.putExtra("wx_callback", "onResp");
intent.putExtra("wx_errCode", resp.errCode);
intent.putExtra("wx_errStr", resp.errStr);
intent.putExtra("wx_transaction", resp.transaction);
intent.putExtra("wx_openId", resp.openId);
intent.putExtra("platformId", platformIds);
if ((resp instanceof SendAuth.Resp))
{
SendAuth.Resp res = (SendAuth.Resp)resp;
Logger.d("code: " + res.code);
intent.putExtra("wx_token", res.code);
}
if (!"msdkwebpage".equals(resp.transaction))
{
startActivity(intent);
}
finish();
}
1.2登录服务端的接入
登录服务的编码按照文档一步一步接入即可。重要的是要细心,与前端商量确定好具体的参数。
2 支付接入
2.1支付客户端接入
支付接入流程如下图所示:
登陆接入和支付接入是两个不同的部分,使用不同的文档以及SDK,可能是由于支付文档和登陆文档衔接的不是太顺畅,在支付过程中遇到较多的问题,下面一一列出。
参数问题
在支付过程中所需参数较多,并且手Q登陆和微信登陆状态下所需的参数部分不同,和需要特别注意。其中pay_token参数的获取文档中并未明确给出。
- pay_token
文档中并未明确给出获取方法,pay_token的获取方式是在手Q的登陆回调中获得的。具体位置在回调中case TokenType.eToken_QQ_Pay接口下,tr.value值即是pay_token.
case TokenType.eToken_QQ_Pay:
token = ret.getAccessToken();
pay_Token = tr.value; //pay_token
break;
- rq.sessionId、rq.sessionType、rq.pay_token
手Q状态下与微信状态下需要传递不同的参数:
//手Q登录态与微信登录态分别传递不同的参数
if (手Q登录状态下){
// 特别注意如果使用的是手Q登录态,这里填的是支付时专用的pay_token
rq.openKey = pay_Token;
rq.sessionId = "openid";
rq.sessionType = "kp_actoken";
}
else if(微信登陆状态下){
rq.openKey = wxAccessToken;
rq.sessionId ="hy_gameid";
rq.sessionType = "wc_actoken";
}
支付界面调起
一般情况下,支付界面调不出来很大可能是参数问题,请仔细核对参数。
2.2支付服务端接入
服务端接入关键点在于签名sig的计算。一下几点需要注意:
- 在进行sig的计算是appID ,appkey 都用手Q 的ID和key
- 微信和手Q支付中pay_token,在sig的计算中,微信 pay_token不参与sig的计算中.
- 就算sig 签名使用snsigcheck中的makesig来进行计算(ts时间戳要特别注意)
- 在请求是session_id, session_type 不同
3 易错总结
除了以上写出几个关键问题之外,我们还遇到一些其他比较刁钻难解的问题,现一一列出,以便查阅。
3.1 非官方正版应用 100044
问题描述
如下图所示:
解决方案
出现该错误的原因是,应用所用包名以及出包所用签名为非腾讯后台申请到的包名及签名,请使用在腾讯后台创建应用时所使用的包名以及签名。
3.2 按照指定签名出包后程序崩溃
问题描述
在使用eclipse默认签名情况下程序可正常运行,但是一旦按照指定签名出包后程序一运行就崩溃。
解决方案
具体原因不明,猜测可能是代码混淆原因吧,解决方法是注销project.properties文件下的一句话:
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
—— 2015年9月14日18:41:46
——写于公司