php实现支付接口签名验证

前言

游戏服务器的玩家充值流程,如果通过google商店或者app store进行充值的话,需要实现回调支付地址。玩家充值成功以后,app store或者google商店会向回调地址传递参数,验证玩家充值,通知游戏服务器给玩家发送钻石或者礼包,并保存消费记录。

易接sdk

小编使用的易接SDK是一套规范、统一的接口,具有下列特点:
通过易接SDK的接口,可以使用易接工具合成不同的渠道包,不需要阅读渠道SDK文档或调试渠道接口;

易接SDK(Android)支持多种平台,包括:Java、cocos、flashair、Unity3D,JS,lua,极大程度的满足游戏需求;

易接SDK(IOS越狱)支持多种平台,包括:Object-C、Cocos C++、Unity3D,极大程度的满足游戏需求。

消费同步接口

消费记录同步接口消费记录同步是由CP服务器实现的,接收用户付费结果的回调接口。当充值成功时,易接后台的状态是等待同步,并将信息传递给CP服务器,CP服务器做相应的处理后(签名验证,消费记录的存储,向游戏服务器发送充值成功的请求等),返回SUCCESS,易接后台的状态变成同步成功。其流程图如下:


php实现支付接口签名验证

同步接口

目前易接服务器向CP服务器通知支付成功情况以及接收CP服务器确认是一个HTTP接口。由CP服务器提供通知URL,易接服务器会在需要同步结果时(包括重新同步)主动调用CP服务器提供的通知URL。
同步接口的基本形式如下:

http://service.cp.host.domain/path/app=1234567890ABCDEF&cbi=CBI123456&ct=1376578903&fee=100&pt=1376577801&ssid=123456&st=1&tcd=137657AVDEDFS&uid=1234&ver=1&sign=xxxxxxxxxxx

参数的具体含义可查阅:

http://www.1sdk.cn/omsdk-sdkenter-online/omsdk-sdkenter-server1/omsdk-sdkenter-server-consume.html

同步参数签名

签名可以让CP服务器确认得到的数据来自于支付服务器而不是恶意第三方。签名方法为共享密钥+MD5方式,算法如下:
共享密钥:
双方共享一个字符串形的密钥
待签名串:
协议参数(对支付服务器是构成URL的参数,对CP服务器是接收的请求参数)中除了sign以外的所有参数,
按字典序由小到大排列 参数名=值,并在中间加入 “&”,构成比如如下的子串:

app=1234567890ABCDEF&cbi=CBI123456&ct=1376578903&fee=100&pt=1376577801&sdk=09CE2B99C22E6D06&ssid=123456&st=1&tcd=137657AVDEDFS&uid=1234&ver=1

支付服务器方签名:
签名=MD5(待签名串+共享密钥)
然后构成
CP服务器同步URL+待签名串+”&sign=”+签名
来进行请求
CP服务器验证:
待验证的签名=MD5(待签名串+共享密钥)
然后把“待验证的签名”和sign的子串进行比较,如果相同就说明一致。
同步失败的重传机制
无论是HTTP连接失败还是CP服务器端没有返回”SUCCESS”,支付服务器都会负责进行重传 ,服务器会按照一定的时间间隔重传同步记录。

PHP实现

public function sdkValid()
{
        $request = array();
        $request["app"] = $_GET['app'];
        $request["cbi"] = $_GET['cbi'];
        $request["ct"] = $_GET['ct'];
        $request["fee"] = $_GET['fee'];
        $request["pt"] = $_GET['pt'];
        $request["sdk"] = $_GET['sdk'];
        $request["ssid"] = $_GET['ssid'];
        $request["st"] = $_GET['st'];
        $request["tcd"] = $_GET['tcd'];
        $request["uid"] = $_GET['uid'];
        $request["ver"] = $_GET['ver'];
        $sign = $_GET['sign'];

        $tmpStr = $this->formatQueryMap($request);
        $tmpStr = md5($tmpStr . C('SDK'));
        if ($tmpStr == $sign) {
            $chargeModel = new ChargeModel();
            $chargeExist = $chargeModel->getCharge($request["tcd"]);

            if ($chargeExist) {
                echo "SUCCESS";
                exit;
            } else {
                $Info = explode("_", $request["cbi"]);

                $rows = $chargeModel->insertCharge($Info[0], $request["ct"], $request["fee"], $request["pt"],$request["ssid"], $request["st"], $request["tcd"], $request["uid"],$request["ver"], $Info[1]);

                if ($rows) {
                    echo "SUCCESS";
                    exit;
                } else {
                    echo "FAILED";
                    exit;
                }
            }
        } else {
            echo "FAILED";
            exit;
        }
    }

    private function formatQueryMap($paraMap)
    {
        $buff = "";
        ksort($paraMap);

        foreach ($paraMap as $k => $v) {
            $buff .= $k . "=" . $v . "&";
        }

        $reqPar = "";
        if (strlen($buff) > 0) {
            $reqPar = substr($buff, 0, strlen($buff) - 1);
        }

        return $reqPar;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容