iSDK系统提供多种商户无可用的支付方式式吗?

这两天终于将腾讯应用宝的SDK给搞定了,之前U8SDK仅仅接入了应用宝的SDK,U8Server并没有实现服务器对应的逻辑。主要是应用宝的支付流程和其他的渠道SDK实在不一样,加上,所问无人解答,事情很多,就被延迟了。目前接入的版本是2.8.1
这两天,应U8SDK部分用户的要求,就想着硬着头皮把应用宝这个顽固给破解掉,哪怕方法不一定好,但至少是完整可用的。经过几天的摸索和尝试,终于在沙箱环境中测试通过。接下来就记录下应用宝的接入过程,把一些踩过的坑标一标
1,去后台申请注册一个游戏(),可能要实名认证。
2、注册一个新的移动应用,然后申请参数
3、2.8.1版本之后,采用了MSDK KEY,之前微信AppKey不再使用。这里要注意,参数别使用错了
4、登录包含QQ登录和微信登录,素材直接在网站上下载,U8SDK接入的方式,为了不耦合游戏层,这里写一个弹窗,展示QQ登录和微信登录按钮。
5、调试在沙箱环境中调试,在后台开启同步沙箱环境。
5.1、assets下msdkconfig.ini中使用MSDK_URL= 作为沙箱环境地址
5.2、config.xml中WG_ENV设置为test,表示沙箱环境,release为线上正式环境。
5.3、服务器端支付查询余额和消费地址都是,正式环境是
5.4、沙箱环境AppKey使用的是沙箱环境对应的AppKey,线上正式环境对应的AppKey不同,注意别弄错了。客户端和服务器端都一致
5.5、沙箱环境,测试支付提供了 发Q币,生成QQ卡,生成支付卡号等工具,可以给QQ号发Q币等,用于测试。
5.6、沙箱环境测试成功之后,记得提交审核,审核通过,才能切到线上环境
5.1、assets下msdkconfig.ini中使用MSDK_URL=http:// 作为沙箱环境地址
5.2、config.xml中WG_ENV设置为test,表示沙箱环境,release为线上正式环境。
5.3、服务器端支付查询余额和消费地址都是http://,正式环境是
5.4、沙箱环境AppKey使用的是沙箱环境对应的AppKey,线上正式环境对应的AppKey不同,注意别弄错了。客户端和服务器端都一致
5.5、沙箱环境,测试支付提供了 发Q币,生成QQ卡,生成支付卡号等工具,可以给QQ号发Q币等,用于测试。
5.6、沙箱环境测试成功之后,记得提交审核,审核通过,才能切到线上环境&
6、支付接入的是米大师,但是,支付流程和其他渠道不一样。请看下图。目前只支持 “游戏币托管模式”,所谓的“道具直购”模式,虽然文档提了,但是明确说了,暂时不支持此种方式接入
米大师和其他渠道SDK支付不太一样,不是通过配置回调地址,异步通知支付结果。而是,客户端调用支付界面支付成功之后,客户端SDK回调之后,客户端需要通知u8server,让u8server去米大师服务器查询余额。但是,我们希望做到支付和消费是一次性的。而不是每次用户游戏内消费,去调用米大师消费的接口。
所以,我们采用u8server查询到余额之后,里面调用消费的接口,扣除用户账户上当前所有的游戏币。
7、游戏币托管模式,就是在腾讯应用宝后台,设置好Q币和游戏里面的支付获取的游戏币的比例关系,然后,支付之后,应用宝返回给你的是游戏币的数量,而不是充值的金额。
8、鉴于米大师,是这种游戏币托管模式,所以类似充值赠送就做不了了,同时客户端充值商品条目必须是固定比例的充值金额,比如
充值10元,获得100元宝
充值50元,获得500元宝
充值100元,获得1000元宝
这样就是OK的。
充值10元,获得100元宝(赠送20元宝)
充值50元,获得500元宝(赠送100元宝)
充值100元,获得1000元宝(赠送300元宝)
这样就做不到。因为当多次充值连续,或者充值延时的时候,用户账户上的余额,无法确定为对应的是哪个商品条目。
充值10元,获得40元宝
充值50元,获得300元宝
充值100元,获得800元宝
这样也做不到,游戏币和人民币的比例必须固定
8、沙箱环境中,测试出现“系统异常,请稍后重试”等,是因为沙箱环境不稳定,一段时间之后再试。多种支付方式换着测
9、为了防止丢单,我们需要在用户每次进游戏的时候,都去请求U8server去查询余额,并消费。这样,可以避免用户丢单的情况。
同时,防止部分支付方式延迟,支付之后,u8server如果没有查询到余额,需要定时去查询,持续2分钟,20秒一次
10、应用宝后台支持分区,鉴于“游戏币托管模式” 流程无法支持当前的订单流程,所以,我们需要将服务器ID和应用宝后台配置的分区ID要一致。
因为没有订单的概念,请求支付前,不需要去u8server获取订单号了,所以也没办法携带自定义参数,表示当前充值的用户roleID,serverID等信息
u8server支付成功之后,返回数据给游戏服务器,游戏服务器无从得知当前是哪个服务器,哪个角色。
11、因为没有订单的概率,数据库中我们单独建立一张表存储应用宝的支付信息。作为数据统计查询使用
12、u8server处理好通知游戏服,这里让游戏服单独提供一个回调接口,给应用宝,因为对于应用宝的回调,游戏服务器直接根据当前游戏币,发送对应的游戏币即可,不再根据支付选项。
13、查询余额和消费的协议,中cookie中的字段别设置错了,刚被坑过,大意了。
14、最后,过程中遇到任何问题,可以咨询腾讯企业QQ:(这一点做的还不错)
最后不得不说,腾讯这里文档的繁杂,真不是一点点。各个地方的描述还不一样,也不晓得哪个是最新哪个是老的。被文档坑了不少次。
本文出自 优优网事,转载时请注明出处及相应链接。本文永久链接: /?p=1927
一个纯粹的屌丝技术控,追求讲故事一样讲技术。在追逐的道路上,不忘留下一个一个脚印。每当有时间,就可以停下来,回头看看走过的路。至少可以证明,小黑这个人,真实的存在过。。。
最新文章:
U8SDK视频教程
&的其他文章
Ɣ回顶部
U8SDK技术群Android接入微信支付完全解析,太全了~
今天来聊聊,android中接入微信支付的需求,肯定有人会说,这多简单呀,还在这里扯什么,赶快去洗洗睡吧~~
那我就不服了,要是说这简单的,你知道微信支付官网多少吗,要是你一百度,下面全是广告,哈哈,你一不小心就掉坑去了,在简单的事,只要你想把他做好,其实也是很复杂的~
首先我们来到瞅瞅:
可以看到这就是微信支付首页,下面有几种支付方式,而我们今天的主角就是APP支付,我们可以直接点进去,或者从左上角接入指引-APP支付,进去的文档式样的,如下图所示:
vc3qs8nWp7i2vdPI69Do0qrExNCpsr3W6KOsxMTQqdfKwc+jrNXi0fnE47/J0tTIw8/gudi1xMjL1LHKws/IyKXXvLG41eLQqdfKwc+jrLb4srvKx8zuzerSu7K918rBz6Os1NrIpdXSz8LSu7K918rBz6OsvMfXocqxvOS+zcrHvfDHrqOswe3N4sTjwey1vMu1wLS4+M7SvbK9ss6i0MXWp7i2xMfXvLG4xMTQqdfKwc+jrMTjw7u/tLn91eLOxLW1o6zEx87Svs3Wu8Tcuse6x8HLTyihyV+hySlPfqGjwe3N4sTE0KnLtdanuLa88rWltcSjrNPQvLi49taqtcDV4tXFzbyjrNPW09DLrcjP1ea/tLn9fn48L3A+Cgo8cD6/ydLUv7S1vcrH0qq80zMwML/ptcSjrLu50OjSqsbz0rW1xNK70KnXysHPoaM8L3A+Cgo8cD7B7c3izqLQxdanuLbT0MG9uPbGvcyot9ax8MrHPGEgaHJlZj0="https://open./">开发者平台和
开发者平台:主要是针对开发者,比如:创建应用,获取appid
商户平台:主要是商户上面的一些管理,比如:可以查看流水,订单呀
这里我只是演示怎么创建应用,最后不会用这个账号的,因为我这是个人账号,没法申请支付,只是给不会创建的朋友做一个演示,需要哪些资料而已,会的可略过~
首先我们来到,没有账号的先注册,这个我想不用演示了,直接演示怎么创建应用,首先你的登录完账号,点击管理中心-移动应用:
点击左上角的创建移动应用,到如下界面,因为这里是测试,所有资料都是随便填啦
点击下一步就来到了
这一步让你填写,需要的平台,以及平台信息,我这里只悬着android,填入包名和签名,另外这里他没有想微博那样可以填入多个签名,那么这里我建议你一开始填入debug的签名,等调试通过了在填写正式签名,签名的获取方法和接入第三方登录是一样的。最后提交审核,等审核完以后,我们点击到应用详情,应该是这样的效果
个人账号创建的应用审核通过后只有,分享功能,如果还需要支付,可以点击申请,然后认证账号并上传一些资料,这又是一个漫长的过程,这里我们就不了那么多了,现在直接说怎么在代码实现吧
运行官方demo
记住这里的支付demo是在商户平台的帮助里面下载,,而不是开发者平台下载的那个demo(以前是可以,现在这里下载的demo,里面剔除了支付),如下图,是这个页面:
第一个是基础库,点击后会跳到开发者平台,第二个参数支付demo,当然里面也包含了分享等一些功能,可以说如果你既要做支付又要做分享,那么你只需要这个一个demo就行了,当然还得需要我这篇文章呀
下载完导入eclipse,替换debug.keystore然后运行,就可以看到如下界面,终于看到支付了,激动不已是不是
然后我们就可以点击“跳转到支付界面”,看看什么效果呀,是骡子是马总的溜溜吧,看到这一面,感觉神清气爽,因为demo跑通了,呵呵~
demo也看了,钱也付了,那我们现在就该开始接入支付了
正式接入支付
首先还是得上一张流程图呀,不然你知道怎么个逻辑?
这是这个文档的
,这是官方的解释
商户和微信支付系统主要交互说明:
步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay
步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明】
步骤5:商户后台接收支付通知。api参见【支付结果通知API】
步骤6:商户后台查询支付结果。,api参见【查询订单API】
首要微信支付暴露给我的是两步,一步是生成预支付订单,然后那个预支付订单id再去调用微信支付,所以说这里就有两种实现方式了,一种是客户端处理这所有步骤,另外一种肯定是服务端创建与支付订单和签名,然后返回给我们,我们才拿着这些参数去调用微信支付。实际应用中,推荐使用服务那种,但是我这里讲的是本地怎么实现支付,如果你们是在服务端支付,那么你的告诉他你需要什么参数,他怎么创建预支付订单等
这是,另外这里由于我没有可用的支付所以,写demo我用的包名和key都是微信demo的
配置activity
配置回调activity
public void testWxPay(View view) {
new Thread(new Runnable() {
public void run() {
String url = "http://wxpay./pub_v2/app/app_pay.php?plat=android";
ToastUtil.shortToastInBackgroundThread(getActivity(), "获取订单中...");
byte[] buf = Util.httpGet(url);
if (buf != null && buf.length > 0) {
String content = new String(buf);
Log.e("get server pay params:", content);
JSONObject json = new JSONObject(content);
if (null != json && !json.has("retcode")) {
req = new PayReq();
//req.appId = "wxf8b4f85f3a794e77";
// 测试用appId
req.appId = json.getString("appid");
req.partnerId = json.getString("partnerid");
req.prepayId = json.getString("prepayid");
req.nonceStr = json.getString("noncestr");
req.timeStamp = json.getString("timestamp");
req.packageValue = json.getString("package");
req.sign = json.getString("sign");
req.extData = "app data"; // optional
ToastUtil.shortToastInBackgroundThread(getActivity(), "正常调起支付");
Log.d("PAY_GET", "返回错误" + json.getString("retmsg"));
ToastUtil.shortToastInBackgroundThread(getActivity(), "返回错误" + json.getString("retmsg"));
Log.d("PAY_GET", "服务器请求错误");
ToastUtil.shortToastInBackgroundThread(getActivity(), "服务器请求错误");
} catch (Exception e) {
Log.e("PAY_GET", "异常:" + e.getMessage());
ToastUtil.shortToastInBackgroundThread(getActivity(), "异常:" + e.getMessage());
}).start();
private void toPay() {
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.sendReq(req);
到这里如果你按照我的配置的话,正常情况下试可用调起支付界面了,如果出现-1,请检查是不是替换了debug.keystore,如果替换了,还是这样记得清空微信缓存
以上测试代码都在上,官方的下载的sdk包也在该仓库的docs目录下
如果我的文章对来带来的帮助,可加我微信,微博,QQ什么啥的交个朋友也是不错的,另外微信,微博都会不定期发一些优质的文章,感谢大家的支持~~,联系方式在我的个人介绍里啦《支付系统》
支付系统存在回调信息,需要设置监听。
std::map&std::string , ProtocolIAP*&* _pluginsIAPMap= AgentManager::getInstance()-&getIAPPlugin();
std::map&std::string , ProtocolIAP*&::
for(iter = _pluginsIAPMap-&begin(); iter != _pluginsIAPMap-&end(); iter++)
(iter-&second)-&setResultListener(this);
开发者需要重写 onPayResult 回调方法
class PluginChannel:public PayResultListener
virtual void onPayResult(PayResultCode ret, const char* msg, TProductInfo info);
游戏客户端 APP 调用 AnySDK 框架支付接口请求订单号
AnySDK 框架获取订单号
AnySDK 框架向渠道平台服务器请求支付
支付成功后,渠道平台服务器同步通知 AnySDK 框架(游戏客户端)
渠道平台服务器会异步通知 AnySDK 服务器
AnySDK 服务器响应渠道平台服务器
AnySDK 服务器将支付结果通知到游戏服务器
游戏服务器响应 AnySDK 支付通知
游戏服务器验证支付通知并发放道具
多种支付方式
AnySDK 框架支持多个支付插件,AnySDK 客户端选择多少个支付,getIAPPlugin 就能获取到多少个。一般情况只会选择一个支付插件,如果选择多个支付插件需要开发者自己提供相关界面完成多支付的逻辑展示。
std::map&std::string , ProtocolIAP*&::iterator it = _pluginsIAPMap-&begin();
if(_pluginsIAPMap)
if(_pluginsIAPMap-&size() == 1)//只存在一种支付方式
(it-&second)-&payForProduct(productInfo);
else //多种支付方式
//开发者需要自己设计多支付方式的逻辑及UI
在加载插件的同时已经对所有 SDK 进行了初始化,开发者不需要额外再进行初始化。支付系统初始化后,会有相关信息的回调,如下:
初始化成功
kPayInitSuccess
null或者错误信息的简单描述
初始化失败
kPayInitFail
null或者错误信息的简单描述
void payForProduct(TProductInfo productInfo);
TProductInfo 实际上是一个 map,productInfo 记录了支付的一些相关的信息,开发者需要提供支付的如下参数:
注意:调用支付函数时需要传入的一些玩家信息参数(如角色名称,ID,等级)都是渠道强制需求(如 UC,小米等),并非 AnySDK 收集所用,如果开发者不填或者填假数据都会导致渠道上架无法通过。
必传参数不能为空,若当前没有可用的值可以写任意值上去。
个别渠道可能还需要添加其他参数,请参考常见问题中的渠道说明,根据渠道判断并添加上相应参数。
Product_Id
商品 ID(联想、七匣子、酷派等商品 ID 要与在渠道后台配置的商品 ID 一致)
Product_Name
Product_Price
商品价格(元),可能有的 SDK 只支持整数
Product_Count
商品份数(除非游戏需要支持一次购买多份商品,否则传 1 即可)
Product_Desc
商品描述(不传则使用 Product_Name)
虚拟币名称(如金币、元宝)
虚拟币兑换比例(例如 100,表示 1 元购买 100 虚拟币)
游戏角色 ID
游戏角色名
Role_Grade
游戏角色等级
Role_Balance
用户游戏内虚拟币余额,如元宝,金币,符石
Party_Name
帮派、公会等
服务器 ID,若无填 "1"
Server_Name
因有些 SDK 不支持浮点数,Product_Price 请传入整数。
回调信息:
kPaySuccess
null或者错误信息的简单描述
kPayCancel
null或者错误信息的简单描述
null或者错误信息的简单描述
支付网络出现错误
kPayNetworkError
null或者错误信息的简单描述
支付信息提供不完全
kPayProductionInforIncomplete
null或者错误信息的简单描述
举例说明:
void PluginChannel::pay()
std::map&std::string , ProtocolIAP*&::iterator it = _pluginsIAPMap-&begin();
if(_pluginsIAPMap)
productInfo[&Product_Id&] = &1&;
productInfo[&Product_Name&] = &10元宝&;
productInfo[&Product_Price&] = &1&;
productInfo[&Product_Count&] = &1&;
productInfo[&Product_Desc&] = &gold&;
productInfo[&Coin_Name&] = &元宝&;
productInfo[&Coin_Rate&] = &10&;
productInfo[&Role_Id&] = &123456&;
productInfo[&Role_Name&] = &test&;
productInfo[&Role_Grade&] = &1&;
productInfo[&Role_Balance&] = &1&;
productInfo[&Vip_Level&] = &1&;
productInfo[&Party_Name&] = &test&;
productInfo[&Server_Id&] = &1&;
productInfo[&Server_Name&] = &test&;
productInfo[&EXT&] = &test&;
if(_pluginsIAPMap-&size() == 1)//只存在一种支付方式
(it-&second)-&payForProduct(productInfo);
else //多种支付方式
//开发者需要自己设计多支付方式的逻辑及UI
//支付回调
//处理回调函数
switch(code)
case kPaySuccess://支付成功回调
//支付成功后,游戏相关处理
case kPayNetworkError://支付网络出错回调
case kPayCancel://支付取消回调
case kPayProductionInforIncomplete://支付信息填写不完整回调
case kPayFail://支付失败回调
//支付失败后,游戏相关处理
case kPayNowPaying:
* 正在进行中回调
* 支付过程中若 SDK 没有回调结果,就认为支付正在进行中
* 游戏开发商可让玩家去判断是否需要等待,若不等待则进行下一次的支付
获取订单号
std::string getOrderId()
用户可通过该函数获取到订单号。
string order_id = iap_plugin-&getOrderId();
注意:调用 payForProduct 后立即调用 getOrderId 的话是获取不到该次支付的订单号的,因为此时客户端还没收到服务端返回的订单号,请在收到支付回调后调用 getOrderId。
重置支付状态
void resetPayState()
支付过程中若 SDK 没有回调结果,就认为支付正在进行中,再次调用支付的时候会回调 kPayNowPaying,可以调用该函数重置支付状态。
ProtocolIAP::resetPayState();
【评论区】
Documentation built with .&&&&纵观整个手游行业的发展,从2012萌芽到大爆发,再到如今的稳步发展,仅经历了短短的几年。2016年的手游新规出台,手游行业进入全面的大浪淘沙,如若手上没有一点干货的中小CP便就此“下车”,而在历经一场大改革,并顺利存活进入2017年的中小CP犹如狼群中侥幸存活下来的小绵羊一般珍贵。&&&&2017年手游行业真正的较量就此开始,而想要在这个行业立足并继续前行的中小cp们,除了需要大量的财力和时间外,还得拥有一个给力的技术团队,这对于中小cp而言绝非易事。为迎合市场需求,2017年初,重庆玖度科技有限公司推出了专门解决此问题的手游运营SDK接入平台——iSDK。直至目前,成功运营大半年之久的iSDK,已拥有上百家合作客户。近日,一家使用iSDK系统半年的畅玩游戏负责人接受了记者专访。&&&&评论&&&&记者:请问您是怎么了解到iSDK这个产品的?&&&&畅玩游戏负责人:其实之前有了解过做SDK搭建方面的一些公司,例如:某尚、某麦之类的。iSDK是通过一个朋友介绍,说iSDK是一款完全免费的手游运营SDK,然后自己也有到网上去了解,发现反响还挺不错。&&&&记者:是什么原因让您在众多产品中选择了iSDK产品呢?畅玩游戏负责人:因为我之前就与重庆玖度科技有合作,是做他们公司旗下手游运营平台“爱上游戏”的CPS。但并不知道他们已经涉足于手游运营SDK这块,通过朋友介绍才知晓。&&&&记者:请问在使用iSDK的过程中你们有遇到什么困难吗?&&&&畅玩游戏负责人:整个搭建过程相当顺利,并没有遇到什么问题,只是在功能操作上遇到一些小问题而已,不过他们的技术团队都有很耐心的讲解,并一一指导。&&&&记者:请问您从接入iSDK到搭建好,共花了多少时间呢?&&&&畅玩游戏负责人:一般来说从研发到平台完全搭建好需要耗时3-6个月不等,这个时间还得在有足够的资金和技术团队做支撑的情况下才能实现。但我们签订iSDK之后,也就域名备案花了些时间,搭建只需1天时间,从备案域名到搭建完成一共花了20天左右时间,为我们节省了大量的人力和时间。&&&&记者:请问您是什么时候接入的iSDK,到现在使用了多久?&&&&畅玩游戏负责人:我是2017年3月初开始接入的,到现在已经使用了6个月左右了。&&&&评论&&&&记者:据说iSDK是一款完全免费的SDK系统,请问您在使用和后期系统维护过程中,对方是否存在隐形消费的情况呢?&&&&&畅玩游戏负责人:没有,我们自签订合同直至完成,再到后期的运维服务,都没有收取任何费用,所提供的数据也全部都是及时数据。他们有一个应急技术团队,如果我们遇到一些技术层面上的问题时,他们都会及时处理,几乎24小时全天服务。&&&&记者:请问您从搭建iSDK到后期的平台运营,平台的流水是否有明显的增长?&&&&&畅玩游戏负责人:增长趋势明显,自我们正式使用开始,后台数据几乎每天都有稳步增长,截至目前,我们平台用户增长率以高达80%之多。而且iSDK产品相当稳定,在半年多的使用过程中几乎没有出现什么大的问题。iSDK可以说是我们中小cp的福音,毕竟选择iSDK我们所投入的资金,人力,时间都节省了太多了,也能把更多的时间和精力投放到运营当中去。
您需要登录后才可以发帖
其他登录方式:

我要回帖

更多关于 国际贸易支付方式 的文章

 

随机推荐