微信/QQ小游戏用户转移文档
<p>[TOC]</p>
<h1>1.研发需要提供</h1>
<p>H5小游戏链接(通过该链接能直接打开游戏区服选择界面)</p>
<h1>2.H5网页端调用</h1>
<p>游戏h5页面引入js文件,js会返回SDK实例csdk</p>
<pre><code>https://cps.moyangmoyang.com/h5sdk/js/client.mini.js</code></pre>
<h1>3.登录</h1>
<h2>3.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍玩家登录游戏,登录成功返回openid,sign</p>
<p><code> csdk.login </code>
</div></p>
<h2>3.2参数说明</h2>
<p>无需传参</p>
<h2>3.3示例代码</h2>
<pre><code class="language-javascript">csdk.login(function (data) {
console.log(data, &#039;内部登录z&#039;)
});</code></pre>
<h2>3.4接口返回</h2>
<pre><code class="language-javascript">// 登录成功,{&quot;openid&quot;:&quot;o7zW95dNJ3ahVNJWBDkUR1fejpt4&quot;,&quot;sign&quot;:&quot;d315ce27454b5d0be22d520bc16b74f6&quot;}</code></pre>
<h1>4.网页下单支付</h1>
<h2>4.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍小游戏订单提交,生成支付订单并保存,玩家选择支付方式,调支付,游戏发货必须以服务端支付回调为准</p>
<p><code> csdk.pay </code>
</div></p>
<h2>4.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|goods_name |是 |string |商品名称 由接入方提供 如:元宝 |
|pay_amount |是 |int | 支付总金额(元)=单价乘数量, 由接入方提供,整数 |
|redirect_uri |是 |string | 异步通知游戏支付结果地址 由接入方提供 |
|extra_info |是 |string | 额外拓展参数(将在服务端支付回调原样透传),可以为空字符串,a=b&c=d |
|order_sn |是 |string | 订单编号(游戏的订单号) |
|role_name |是 |string | 角色名称 由接入方提供 |
|server_name |是 |string | 区服名称 |
|goods_identifier |是 |string | 商品ID |</p>
<h2>4.3示例代码</h2>
<p><div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
如果下单接口调用成功,会跳出选择支付方式;
不能再微信环境里面调用。
</div></p>
<pre><code class="language-javascript">//下单参数
function order() {
let pay_data = {
pay_amount:0.01,
extra_info: &#039;额外参数&#039;,
goods_identifier: &#039;moyang&#039;,
goods_name: &#039;测试商品&#039;,
redirect_uri: &#039;https://test.com/testttt&#039;,//支付回调函数
role_name: &#039;无角色&#039;,
server_name: &#039;默认服务器&#039;,
order_sn: randomNumber(),
}
csdk.pay(pay_data,function (orders) {
console.log(orders,&#039;orsersssss&#039;)
})
}</code></pre>
<h1>5.支付成功回调通知(服务端接口)</h1>
<h2>5.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍
1.回调地址在客户端调用支付接口时传入,字段<font color="red">redirect_uri</font>。
2.回调方式为POST(请使用post方式接收回调值),数据提交为表单方式(Content-Type: application/x-www-form-urlencoded)
3.此接口地址由游戏服务方提供,用于接收用户支付结果的接口,控制游戏内发货,2S不响应则超时,做好过滤,防止重复通知
</div></p>
<h2>5.2回调参数说明(post)</h2>
<p>|参数名|说明|
|:---- |----- |
|order_sn |订单编号(游戏的订单号) |
|extra_info |透传参数(原样返回,游戏在创建订单时传入,不允许有空格) |
|pay_amount |订单金额(单位:元,double类型,精确到小数点后两位)一定要校验价格 |
|pay_status |订单支付状态(1或0;1为成功支付,0为未支付) |
|pay_time |支付时间(若为三方或渠道支付,此时间为平台接收到支付成功时间) |
|uid |用户的唯一id,与客户端的openid字段相同 |
|goods_name |小游戏道具名字(商品名字) |
|appid |小游戏appid |
|sign |签名(为了安全,请校验签名)签名规则看回调签名 |</p>
<h2>5.3回调签名</h2>
<pre><code class="language-javascript">1)去除sign,其他所有POST的参数均参与签名,签名不需要转化大小写
2)参数名进行升序排序后
3)按照key1=val1&amp;key2=val2&amp;key3=val3格式生成源字符串。
4)md5(源字符串+加密secret_key)生成签名sign; key1=val1&amp;key2=val2&amp;key3=val3secret_key
签名示例:
假设现有参数为:{&quot;order_sn&quot;:&quot;1603702733183568507&quot;,&quot;extra_info&quot;:&quot;&quot;,&quot;goods_identifier&quot;:&quot;f4355f16858fc0244ea74ac540581148&quot;,&quot;pay_amount&quot;:&quot;1.00&quot;,&quot;pay_status&quot;:1,&quot;pay_time&quot;:1603702732,&quot;uid&quot;:&quot;09122E14E6DE6E81F493000A15121368&quot;}
密钥为:ibIa4rDIxHnT1uw
参数名排序后拼接的字符串为:extra_info=&amp;goods_identifier=f4355f16858fc0244ea74ac540581148&amp;order_sn=1603702733183568507&amp;pay_amount=1.00&amp;pay_status=1&amp;pay_time=1603702732&amp;uid=09122E14E6DE6E81F493000A15121368ibIa4rDIxHnT1uw
Sha1加密为:aa5eff8b0c74764909550daf5e908cbc1fd72ea9
Md5加密为:3762f09a6804ec6aed26955854c6f7ee</code></pre>
<h2>5.4回调返回(json)</h2>
<pre><code class="language-javascript">1.游戏服务端在收到回调后,返回{&quot;code&quot;:0,&quot;message&quot;:&quot;success&quot;}代表游戏发货成功。其他code码,游戏服务端自己定义。
2.可能存在重复通知的情况,如果已经发货成功,也请直接返回{&quot;code&quot;:0,&quot;message&quot;:&quot;success&quot;}。</code></pre>