资讯专栏INFORMATION COLUMN

腾讯米大师支付服务器端接入流程

X_AirDu / 2569人阅读

摘要:应用即应用部署在腾讯服务器上发货只需协议即可,不需要使用安全协议。返回建议在发货接口中记录被调用的,用于查看是否发货回调接口能够被腾讯支付服务器回调,发起一笔支付请求,查看发货回调接口是否有被调用。

腾讯开放平台的接入是非常麻烦的,文档各种不清不楚的,有些东西文档根本没有写,如果不跟腾讯的技术人员对接的话,你都可能做不出来。虽然他们也没有帮到什么

申请过程就不赘述(申请过程很蛋疼),直接开始接入。根据项目需求,我采用的是【米大师道具直购模式】,官方文档,这了提一点,在后面腾讯客服发了个新的米大师文档,这个文档才比较详细。

一、下单

下单有两种,一种服务器下单,一种APP下单,我采用的服务器下单

建议使用官方的SDK来进行签名,自己来签名可能会失败(我水平太菜)SDK下载

 ( ) +  |  & = * ^-等特殊字符,支持下划线_)
    $data["pf"] = "qq_m_qq-2001-android-2011-xxxx"; 
    $data["pfkey"] = "ASDFGHJ123456"; 
    //游戏服务器大区id,游戏不分大区则默认zoneId ="1",String类型。如过应用选择支持角色,则角色ID接在分区ID号后用"_"连接。
    $data["zoneid"] = "1"; 
    //使用x*p*num的格式,x表示物品ID,p表示单价(以Q点为单位,1Q币=10Q点,单价的制定需遵循腾讯定价规范),num表示默认的购买数量。
    $data["payitem"] = "1*10*1"; 
    //商品描述
    $data["goodsmeta"] = "充值*金币充值"; 
    //商品图片
    $data["goodsurl"] = "http://www.xxx.com/img.jpg"; 
    //(可选)道具总价格。(amt必须等于所有物品:单价*建议数量的总和 单位为1Q点)
    $data["amt"] = "10";
    //可选  用户可购买的道具数量的最大值
    //$data["max_num"] = ""; 
    //(可选)1表示用户不可以修改物品数量,2 表示用户可以选择购买物品的数量。默  认2(注:批量购买的时候,必须等于1)
    $data["appmode"] = "1";
    //如果你不传的话回调里面也会没有,传了回调会加上此参数,并改名为【appmeta】,且格式为【商户自己定义的参数*支付方式*平台渠道】
    $data["app_metadata"] = "订单类型*订单编号"; 
    $data["userip"] = "127.0.0.1"; 
    $data["format"] = "json";
    
    //签名,这里直接调用SDK的方法,不要自己去写,会有很多坑,我之前就是不想用SDK想自己写结果按照文档流程签名死活不对,这里注意 秘钥后面跟了一个【&】
    $data["sig"] = SnsSigCheck::makeSig("GET","/v3/r/mpay/buy_goods_m",$data,"你的秘钥&");
    
    //设置cookie,微信与QQ的不一样,我也不知道为什么要设置cookie
     if ($login_type == "qq") {
        $cookie_data = [
            "session_id"   => "openid",
            "session_type" => "kp_actoken",
            "org_loc"      => rawurlencode("/v3/r/mpay/buy_goods_m"),
        ];
    } elseif ($login_type == "wx") {
        $cookie_data = [
            "session_id"   => "hy_gameid",
            "session_type" => "wc_actoken",
            "org_loc"      => rawurlencode("/v3/r/mpay/buy_goods_m"),
        ];
    }
    
    //下单
    $result = SnsNetwork::makeRequest("https://ysdktest.qq.com/mpay/buy_goods_m", $data, $cookie_data, "get");

$result 格式为(我转成了JSON,原本是数组)

    {
      "result": true,
      "msg": "{"ret":0,"token":"842C2C19D11B7780D0E9B4D8E73ED80531721","url_params":"/v1/sx8/1106694898/mobile_goods_info?token_id=842C2C19D11B7780D0E9B4D8E73ED80531721","attach":""}"
    }

返回参数说明
ret
返回码 0 :成功,
>=1000:失败
msg ret不为 0 的时候,错误信息(utf-8编码)
token ret为0的时候,开发者需要保留。后续扣费成功后调用第三方发货时,会再传给开发者,作为本次交易的标识,有效期5分钟
url_params
ret为0的时候,返回真正购买物品的url的参数,开发者需要把该参数
传给sdk跳转到相关页面使用户完成真正的购买动作。

将msg里面的url_params与token返回给APP即可调用支付

二、应用发货回调
1.首先去后台配置回调地址,我这里是https,默认是http,可以用ip,如果用域名的话需要用https,但是你填写的时候他只会提示你要切换https,但是又不告诉你在哪里切。问了客服才知道,要他们来切换。我也是醉了
2.配置好了之后下载证书

hosting应用on CVM(即应用部署在腾讯CVM服务器上):
-发货URL只需HTTP协议即可,不需要使用SSL安全协议。
-必须使用9001端口(内网端口,需开发者主动启用,用apache iis或nginx做一个web监听,端口改成9001)。

hosting应用on CEE_V2(即应用部署在腾讯CEE_V2服务器上):
-发货URL只需HTTP协议即可,不需要使用SSL安全协议。
-必须使用9001端口(内网端口,需开发者主动启用,用apache iis或nginx做一个web监听,端口改成9001)。
-路径必须以ceecloudpay开头,即支付相关代码必须都放到应用根目录下的“ceecloudpay”目录下。
-对于CEE其发货URL的IP只能填写为10.142.11.27或者10.142.52.17(详见:CEE_V2访问云支付)。

non-hosting应用(即应用部署在开发者自己的服务器上)
-发货URL必须使用HTTPS协议。
-必须使用443端口(外网端口)。

注:我用的不是腾讯的服务器所以证书采用的是non-hosting应用

linux服务器证书配置

将下载的证书里面的
ca.crt , xxxxxxxx.crt xxxxx.key 3个文件上传到linux服务器,一般放在项目的私有目录
nginx你项目的配置里面加上

server{
    listen 443;
    server_name 你的网站;
    index index.php;
    root  网站目录;
    
    ssl                       on;
    ssl_certificate           服务器存放的地址/xxxxxxxx.crt;
    ssl_certificate_key       服务器存放的地址/xxxxxxxx.key;
    ssl_verify_client         off;
    ssl_session_timeout       5m;
    ssl_protocols             SSLv2 SSLv3 TLSv1;
    ssl_ciphers               ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
    ssl_client_certificate    服务器存放的地址/ca.crt;
    ssl_verify_depth          1;
    
    #其他配置
    ...
}

重启服务器

手动访问一下看下是否能够访问,能够访问则配置成功

3.回调逻辑,你用get提交的请求,腾讯也用的get回调

回调参数 json_encode($_GET):

{
  "amt": "1",
  "appid": "123456789",
  "appmeta": "(参考上面下单)订单类型*订单编号*qqwallet*qq",
  "billno": "流水号",
  "cftid": "财付通订单号",
  "channel_id": "00000000-android-00000000-869782022252681-ysdkwater-qq",
  "clientver": "android",
  "ebazinga": "1",
  "openid": "123123123123123",
  "payamt_coins": "0",
  "paychannelsubid": "1",
  "payitem": "3*0.1*1",
  "providetype": "5",
  "pubacct_payamt_coins": "",
  "token": "123123123123123",
  "ts": "1518081937",
  "version": "v3",
  "zoneid": "1",
  "sig": "H0jsNEOnf1mKIXgZ4mM0pnuk7BQ="
}

这里说是要验证签名,但是我用他的SDK没有验证出来 就放弃了o(╥﹏╥)o

 0,
    "msg" => "ok",
]);
exit;
腾讯的文档太坑爹了

[参考]
http://canann.iteye.com/blog/...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28239.html

相关文章

  • 腾讯云轻量首购特惠,1核2G5M首年50元,可选上海/北京/成都/广州机房

    摘要:腾讯云怎么样,腾讯云好不好,腾讯云目前有轻量应用服务器首购特惠活动,核内存盘月流量带宽首年仅元,高性价比,助力轻松上云机房可选海北京成都广州,产品新用户可享不限个人企业用户。腾讯云怎么样,腾讯云好不好,腾讯云目前有轻量应用服务器Lighthouse首购特惠活动,1核2G内存50GB SSD盘500GB月流量@5M带宽首年仅50元,高性价比,助力轻松上云!机房可选海/北京/成都/广州,产品新用...

    Blackjun 评论0 收藏0
  • 腾讯云轻量云首购特惠:1核2G5M首年50元,可选上海/北京/成都/广州机房

    摘要:腾讯云怎么样目前,腾讯云有轻量应用服务器首购特惠活动,核内存,高性价比,助力轻松上云机房可选海北京成都广州,核首年元,轻量应用服务器是新推出的以及开发者和中小企业使用为目的的云服务器产品,适用于支撑小型网站应用博客论坛云端开发测试学习环境等腾讯云怎么样?目前,腾讯云有轻量应用服务器Lighthouse首购特惠活动,1核2G内存50GB [email protected],高性价比,助力轻松上...

    tain335 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<