转载自:http://blog.csdn.net/chenjie19891104/article/details/48321427
今天着重把之前渠道服务器端SDK的时候,遇到的一个蛋疼的问题给解决了。
 
按照之前我们搭建U8Server的思路,U8Server是可以完美支持多款游戏的。包括登录认证和支付回调。登录认证,没啥好说的。统一的接口即可,和客户端的协议对应上。支付回调呢?各个渠道的支付回调逻辑,对于每款游戏来说都是一样的,然后每个游戏填写的登录回调地址,也都一样。
 
U8Server采用J2EE成熟框架实现,各个游戏的各个渠道的参数,是配置在数据库中,通过后台管理工具来完成添加,修改,删掉等操作。
 

前我们的流程,相信大家还记得。客户端在调用支付接口之前,首先会来U8Server获取一个订单号。这个时候,U8Server会在订单数据表中记录一
条数据,然后将生成的订单号,返回给客户端。客户端将该订单号放在渠道SDK的扩展字段或者固定订单号字段中传到SDK服务器。SDK服务器支付完成,回
调到U8Server的时候,会将这个订单号原封不动的返回。
 
这个时候,在每个渠道的支付回调方法中,我们首先获取到渠道SDK返回的参数中的订单号。然后根据该订单号来查找数据库中对应的订单信息,进而获取到当前支付的用户信息,渠道信息,游戏信息等相关联的数据
 

种方式,对于多数渠道来说,是OK的。但是在接安智和ITools的时候,我们发现,这些渠道在支付回调的时候,把所有的数据都进行了加密处理,支付回调
方法中,拿到这个参数无法直接获取到订单号,需要先拿到该渠道对应的解密密钥来对该加密过的参数进行解密,然后才能取到订单号等信息。
 
这就和我们之前的方式,就有冲突了。
 
我们是先解析参数,然后通过订单号,获取到渠道数据,再从渠道数据中获取当前渠道的配置数据(就是上面的解密密钥)。
但是现在这两个渠道是要求,我们先解密,再获取订单号。但是,解密需要的密钥,我们根本拿不到。因为我们是通过订单号获取渠道数据的。
 
后来想了想,能否通过URL地址,就直接获取到渠道号。比如,之前UC渠道,我们的支付回调地址是这样的:
 
http://192.168.1.88:8080/uc/payCallback
 
那么,现在,我们在配置渠道支付回调地址的时候,加上渠道号(比如当前游戏对应UC的渠道号为10):
 
http://192.168.1.88:8080/uc/payCallback/10
 
然后,在解析该URL地址的时候,我们需要通过某种方式,做一个URL重写。把类似的URL,给重写成如下形式:
 
http://192.168.1.88:8080/uc/payCallback?u8ChannelID=10
 
这样,我们就可以在UC渠道的支付回调方法payCallback中,直接获取到u8ChannelID=10.然后,就可以直接获取到渠道数据,进而获取到对应的配置数据。
 
好在,这种方式是完全可行的。我们采用J2EE(SSH2框架)来实现的U8Server,只需要再集成一个Tuckey UrlRewriteFilter 即可完成这样的URL重写。
 
关于该插件的使用很简单,网站上说明很详细,就不多说了。这里仅仅注意两点:
 
1、在web.xml中配置UrlRewriteFilter的时候,将其配置在struts2的Filter之前,否则URL重写无效
 
2、在struts2的filter-mapping中加上dispatcher的申明:
 
    <dispatcher>REQUEST</dispatcher>
   <dispatcher>FORWARD</dispatcher>
 
然后,在urlrewrite.xml中配置我们需要的重写规则正则表达式即可:
 
<rule>
   <from>^/(.*)/payCallback/([0-9]+)</from>
   <to>/$1/payCallback?u8ChannelID=$2</to>
</rule>
 
现在访问这些地址:
 
   http://192.168.1.88:8080/uc/payCallback/10
   http://192.168.1.88:8080/downjoy/payCallback/11
   http://192.168.1.88:8080/anzhi/payCallback/39
 
都会变成如下形式:
 
   http://192.168.1.88:8080/uc/payCallback?u8ChannelID=10
   http://192.168.1.88:8080/downjoy/payCallback?u8ChannelID=11
   http://192.168.1.88:8080/anzhi/payCallback?u8ChannelID=39
 
这样,所有渠道的支付回调地址就统一了,全部为如下形式:
  
   http://{host}/{channel}/payCallback/{channelID}
 
在这里,顺便说一句。之前和很多童鞋的沟通交流中发现,%80以上的客户端的SDK接入同学,都只关注SDK客户端的接入,对服务器端的接入,一无所知,也不愿意着手去思考和研究。
 

然,可能服务器端不需要你去做,但是了解一下服务器端的接入原理,对SDK接入来说,可以培养起很好的大局观。SDK接入本身并不难,但是要做到高效,简
洁,易于扩展和维护还是需要花费些心思的。(之前朋友所在的游戏公司招聘专门负责SDK接入的技术总监,月薪30K,你扪心自问,能够胜任吗?)
 

希望这些从事SDK接入的同学能够早日明白这一点

教你快速高效接入SDK——服务器端支付回调的处理方式的更多相关文章

  1. 教你快速高效接入SDK——总体思路和架构

    题记:很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360......据统计国内市场当前不下于100家渠道,还包括一些没有SDK的小渠道.每个渠道SDK接入的方法呢, ...

  2. 教你高速高效接入SDK——Unity统一接入渠道SDK(Android篇)

    U8SDK的设计之初,就是为了可以支持各种游戏引擎开发的游戏,而不不过Android的原生平台.眼下一大半的手游,都是採用Unity3D和Cocos2dx开发,那么这里,我们就先来一步步给大家演示,用 ...

  3. tp5 快速接入扫码支付

    前提是申请好微信支付,同时配置好key,以及支付回调地址 1.composer composer require yansongda/pay 2.引入 use Yansongda\Pay\Pay; / ...

  4. H5网站接入支付宝的支付接口

    写本文章的目的是为了记录工作中遇到的问题,方便以后遇到可以迅速解决问题 H5手机网站接入支付宝的支付接口,推荐使用支付宝提供的SDK来快速开发 我使用的是SDK开发 引用命名空间 using Aop. ...

  5. U8SDK——游戏接入SDK(只接入抽象框架)

    上一篇文章我们说了整个U8 SDK抽象成的设计,那这篇文章,我们就来验证一下,他是否如我们期待的那样,简单灵活. 正如之前所说,对于每个游戏,只需要接入抽象层,而每个渠道SDK的接入,就是该抽象层的一 ...

  6. 商家 APP 如何接入新版支付宝支付,老版本商家如何升级

    代码地址如下:http://www.demodashi.com/demo/14006.html 前言 支付宝移动支付2.0版本对比1.0版本做了较大更新,新申请的商家都需要采用最新2.0版本 SDK ...

  7. vue+uni-app商城实战 | 第一篇:【有来小店】微信小程序快速开发接入Spring Cloud OAuth2认证中心完成授权登录

    一. 前言 本篇通过实战来讲述如何使用uni-app快速进行商城微信小程序的开发以及小程序如何接入后台Spring Cloud微服务. 有来商城 youlai-mall 项目是一套全栈商城系统,技术栈 ...

  8. Photoshop教您快速的制作标准一寸证件照教程

    Photoshop教您快速的制作标准一寸证件照教程 对急需证件照的朋友,只要有一部相机,有电脑安装了PS软件,就可很快自己完成一寸照片的制作. 首先将相机卡里的照片存放在电脑硬盘里: 打开PS图片处理 ...

  9. FoxOne---一个快速高效的BS框架--WEB控件属性编辑器

    FoxOne---一个快速高效的BS框架--(1) FoxOne---一个快速高效的BS框架--(2) FoxOne---一个快速高效的BS框架--(3) FoxOne---一个快速高效的BS框架-- ...

随机推荐

  1. 一篇关于匿名函数(function(){})()不错的文章

    代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他 ...

  2. js 的一些知识 摘自http://img0.pconline.com.cn/Pc_intranet/1105/13/313647_7.pdf

    Js 问题分析--js 影响页面性能现状分析:问题陈述分析问题:抽象问题根源,通过实例或推理证明问题的严重性问题引申:以现有问题为点开始扩散,这将导致其它什么问题,或同一类型的问题问题总结:从分散开始 ...

  3. 初试Office 365企业版E3

    Microsoft Office 365 团队给了所有现任的MVP 12个月的微软 Office 365 企业 E3 订阅,今天激活账号并试用了一下,发现非常强大,本文简要介绍下Office 365 ...

  4. .net core 学习

    资源: https://github.com/aspnet/home https://github.com/dotnet/cli

  5. [翻译]理解Swift中的Optional

    原文出处:Understanding Optionals in Swift 苹果新的Swift编程语言带来了一些新的技巧,能使软件开发比以往更方便.更安全.然而,一个很有力的特性Optional,在你 ...

  6. 在.NET中使用管道将输出流转换为输入流

    最近在写一段代码,将本地文件压缩加密后发送到服务器,发送到服务器的类用一个输入流作为参数获取要上传的数据,而压缩类和加密类都是输出流. 如何将输出流转换为输入流,最直观的方法是缓存输出流的全部内容到内 ...

  7. Azure PowerShell (12) 通过Azure PowerShell创建SSH登录的Linux VM

    <Windows Azure Platform 系列文章目录> 本章将介绍如何使用Azure PowerShell,创建SSH登录的Linux VM 前提要求: 1.安装Azure Pow ...

  8. Qt5 Crash When Open File With QFileDialog

    问题描述 在使用Qt的QFileDialog这个类,来进行文件的打开和选择的时候, 就在调用的时候, 总是发生崩溃. 而且没有任何的提示性的信息. 而且崩溃的概率很高. 也有不崩溃的情况. 这个问题, ...

  9. Mac安装Bower

    1.安装bower,得首先安装node: brew install npm //npm是nodejs的程序包管理器,如果安装过nodejs,可忽略此步. 2.安装Git(因为需要从Git仓库获取一些代 ...

  10. vs code插件记录

    最近一段时间一直在迷恋vs code,使用了一段时间,发现它即精简又快速,安装插件又快又稳定而且插件说明也很详细,是一款继sublime后少得的良心前端编辑器,配合上一些插件可以补全一些不足以更趋向于 ...