当前位置: 首页 > 后端技术 > PHP

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

时间:2023-03-30 01:52:11 PHP

腾讯开放平台接入很麻烦,文档不清楚,有些文档根本就没有写。如果你不联系腾讯的技术人员,你他们可能做不到。虽然他们帮助不大,但是申请过程我就不细说了(申请过程很痛苦),直接开始连线。根据项目要求,我采用了官方文档【米大师Pros直购模式】。这是一点点提一下。后来腾讯客服发来了新的米大师文档,更加详细。1、下单有两种,一种是服务器下单,一种是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['格式']='json';//签名,这里直接调用SDK的方法,不要自己写,会有很多坑,我只是不想用SDK想按照文档流程自己写结果,这里注意秘钥后面跟着一个【&】$data['sig']=SnsSigCheck::makeSig('GET','/v3/r/mpay/buy_goods_m',$data,"yoursecretkey&");//设置cookie,微信和QQ不一样,不知道为什么要设置cookieif($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:success,>=1000:failure当msgret不为0时,错误信息(utf-8编码)tokenret为0时,开发者需要保持后续推演成功。调用第三方发货时,会传递给开发者作为本次交易的标识。有效期为5分钟。当url_paramsret为0时,返回实际购买商品的url开发者需要将此参数传递给sdk,以跳转到相关页面,以便用户完成真正的购买动作。将msg中的url_params和token返回给APP调用支付。二、App下发回调1、首先到后台配置回调地址。我这里是https,默认是http,你可以用ip。如果使用域名,则需要使用https。但是当你填写的时候,它只会提示你切换到https,而不会告诉你切换到哪里。问了客服才知道,让他们换了。我也醉了2、配置完成后,在CVM上下载证书托管应用(即应用部署在腾讯CVM服务器上):-下发URL只需要HTTP协议,不需要使用SSL安全协议。-必须使用9001端口(内网端口,需要开发者主动开启,使用apacheiis或nginx作为web监视器,将端口改为9001)。CEE_V2上托管应用(即应用部署在腾讯CEE_V2服务器上):-下发URL只需要使用HTTP协议,不需要使用SSL安全协议。-必须使用9001端口(内网端口,需要开发者主动开启,使用apacheiis或nginx作为web监视器,将端口改为9001)。-路径必须以ceecloudpay开头,即支付相关代码必须放在应用根目录下的“ceecloudpay”目录下。-对于CEE,其发货网址的IP只能填写为10.142.11.27或10.142.52.17(参见:CEE_V2接入云支付)。非托管应用(即应用部署在开发者自己的服务器上)——投递URL必须使用HTTPS协议。-必须使用端口443(外网端口)。注意:我没有使用腾讯的服务器,所以证书是非托管申请的linux服务器证书配置。将下载的证书中的ca.crt、xxxxxxxx.crtxxxxx.key3个文件上传到linux服务器,一般在项目中添加服务器{listen443;server_name您的网站;索引index.php;网站根目录;SSL开启;ssl_certificate服务器地址/xxxxxxxx.crt;ssl_certificate_key服务器地址/xxxxxxxx.key;ssl_verify_client关闭;ssl_session_timeout5m;ssl_protocolsSSLv2SSLv3TLSv1;ssl_ciphersALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;ssl_prefer_server_ciphers开启;/ca.crt;ssl_verify_depth1;#Otherconfigurations...}重启服务器,手动访问看看是否可以访问。如果可以访问,则配置成功。3.回调逻辑,你用get提交的请求,腾讯也是用get回调回调参数json_encode($_GET):{"amt":"1","appid":"123456789","appmeta":"(refer如上订单)订单类型*订单号*qq钱包*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(╥﹏╥)o0,'msg'=>'确定',]);退出;腾讯的文档太坑爹了【参考】http://canann.iteye.com/blog/...