W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
小游戲支付提供玩家在小游戲中購買道具的能力
主要的流程: 1、小程序內(nèi)調(diào)用登錄接口,獲取到用戶的openid 2、開發(fā)者 server調(diào)用下單接口 4、開發(fā)者 server接收支付通知
開發(fā)者需要在QQ小程序開發(fā)者管理端上架道具
本接口應(yīng)在服務(wù)器端調(diào)用,詳細(xì)說明參見服務(wù)端API。
玩家購買道具前,開發(fā)者需要通過后臺接口進(jìn)行預(yù)下單
POST https://api.q.qq.com/api/json/openApiPay/GamePrePay?access\_token=ACCESS\_TOKEN
請求參數(shù) | 屬性 | 類型 | 默認(rèn)值 | 必填 | 說明 |
---|---|---|---|---|---|
openid | string | 是 | 用戶唯一標(biāo)識符 | ||
appid | string | 是 | 小程序 appId | ||
ts | number | 是 | UNIX 時間戳,單位是秒 | ||
zone_id | string | 是 | 游戲服務(wù)器大區(qū)id,zoneId ="1" | ||
pf | string | 是 | 平臺 安卓:qq_m_qq-2001-android-2011 | ||
user_ip | string | 否 | 用戶外網(wǎng) IP, 不參與計算簽名 | ||
amt | number | 是 | 扣除游戲幣數(shù)量,不能為 0 | ||
bill_no | string | 是 | 訂單號,業(yè)務(wù)需要保證全局唯一;相同的訂單號不會重復(fù)扣款。長度不超過63,只能是數(shù)字、大小寫字母_- | ||
goodid | string | 是 | 在開發(fā)者管理端上架道具的id | ||
good_num | int | 是 | 要購買的道具數(shù)量 | ||
app_remark | string | 否 | 備注信息,如果不為空,通知發(fā)貨是會回傳 | ||
sig | string | 是 | 以上參數(shù)("user_ip"字段除外,含可選最多11個)+uri+session_key,用 HMAC-SHA256簽名 | ||
access_token | string | 是 | 接口調(diào)用憑證 |
返回的 JSON 數(shù)據(jù)包
屬性 | 類型 | 說明 |
---|---|---|
errcode | number | 錯誤碼 |
errmsg | string | 錯誤信息 |
prepayId | string | 訂單號,有效期是 48 小時 |
errcode 的合法值 | 值 | 說明 |
---|---|---|
0 | 請求成功 | |
-1 | 系統(tǒng)繁忙,此時請開發(fā)者稍候再試 | |
-3000 | access_token 校驗失敗,access_token需要放在url中 | |
90011 | sig簽名錯誤 | |
90012 | 訂單已存在 | |
90017 | 沒有調(diào)用接口的權(quán)限 | |
90018 | 參數(shù)錯誤 |
POST 數(shù)據(jù)格式:JSON
{
"openid":"55107C3B8501CD7CBD90AEE4626E6D17",
"appid":"1107981003",
"ts":1507530737,
"zone_id":"1",
"pf":"qq_m_qq-2001-android-2011",
"amt":10,
"goodid":"43",
"good_num":1,
"bill_no":"69ae13a3a87f2551109a2ed26bc704201f56d664",
"app_remark":"xxxxx",
"sig":"38181bd0acf24eda203655a3be9f2e42b62d4fcf1c1de61a98b0573d13531449"
}
1. 請求方法: POST 2. 下單url中的path(/api/json/openApiPay/GamePrePay)部分,做標(biāo)準(zhǔn)的url Encoding, 標(biāo)準(zhǔn)請參考《URL Encoding 》
3. 請求參數(shù)按字典排序,并用"&"拼接, 注意空字段不參與排序
amt=10&app_remark=xxxxx&appid=1107981003&bill_no=69ae13a3a87f2551109a2ed26bc704201f56d664&good_num=1&goodid=43&openid=55107C3B8501CD7CBD90AEE4626E6D17&pf=qq_m_qq-2001-android-2011&ts=1507530737&zone_id=1
4. 拼接session_key,用戶登錄時開發(fā)者后臺可以通過code2session接口獲取到
session_key=VUNQZ0hRYURxNlZZbmNOZw==
5. 簽名前的字符串如下圖
POST&%2Fapi%2Fjson%2FopenApiPay%2FGamePrePay&amt=10&app_remark=xxxxx&appid=1107981003&bill_no=69ae13a3a87f2551109a2ed26bc704201f56d664&good_num=1&goodid=43&openid=55107C3B8501CD7CBD90AEE4626E6D17&pf=qq_m_qq-2001-android-2011&ts=1507530737&zone_id=1&session_key=VUNQZ0hRYURxNlZZbmNOZw==
6.HMAC-SHA256得到的簽名結(jié)果
$h = hash_hmac('sha256', 'POST&%2Fapi%2Fjson%2FopenApiPay%2FGamePrePay&amt=10&app_remark=xxxxx&appid=1107981003&bill_no=69ae13a3a87f2551109a2ed26bc704201f56d664&good_num=1&goodid=43&openid=55107C3B8501CD7CBD90AEE4626E6D17&pf=qq_m_qq-2001-android-2011&ts=1507530737&zone_id=1&session_key=VUNQZ0hRYURxNlZZbmNOZw==', 'VUNQZ0hRYURxNlZZbmNOZw==', true);
var_dump(bin2hex($h));
簽名:
38181bd0acf24eda203655a3be9f2e42b62d4fcf1c1de61a98b0573d13531449
屬性 | 類型 | 默認(rèn)值 | 必填 | 說明 |
---|---|---|---|---|
openid | string | 是 | 用戶唯一標(biāo)識符 | |
bill_no | string | 是 | 訂單號,業(yè)務(wù)需要保證全局唯一;相同的訂單號不會重復(fù)扣款。長度不超過63,只能是數(shù)字、大小寫字母 | |
amt | number | 是 | 扣除游戲幣數(shù)量,不能為 0 | |
ts | number | 是 | UNIX 時間戳,單位是秒 | |
app_remark | string | 否 | 備注信息,如果為空,不參與計算簽名 | |
sig | string | 是 | 以上所有參數(shù)(含可選最多11個)+appsecret HMAC-SHA256簽名 |
回調(diào)地址 這里的回調(diào)地址是示例,以開發(fā)者在管理端 配置的為準(zhǔn) http://test.com/pay/callback 1
app_remark字段為空時,回調(diào)消息如下:
{
"openid": "55107C3B8501CD7CBD90AEE4626E6D17",
"bill_no":"BillNo_123",
"amt":123,
"ts":1553322984,
"sig": "1d7d3b724601a0b55a43e03f140ce55322401fedd359b1ea1dfc96a02f6e6f36"
}
app_remark字段不空時,回調(diào)消息如下:
{
"openid": "55107C3B8501CD7CBD90AEE4626E6D17",
"bill_no":"BillNo_123",
"amt":123,
"ts":1553322984,
"app_remark":"xxxxx",
"sig": "1d7d3b724601a0b55a43e03f140ce55322401fedd359b1ea1dfc96a02f6e6f36"
}
為了確保,QQ會對明文數(shù)據(jù)進(jìn)行簽名。開發(fā)者可以根據(jù)業(yè)務(wù)需要對數(shù)據(jù)包進(jìn)行簽名校驗,確保數(shù)據(jù)的完整性。
HyVFkGl5F5OQWJZZaNzBBg==
strPath=url.QueryEscape("/pay/callback") // 這里要替換成開發(fā)者在管理端配置的鏈接
3.計算簽名時,沒有值的參數(shù)不參與簽名,所有參與簽名的參數(shù)按字典序排序,這里以app_remark為空時的回調(diào)簽名為例,app_remark不空時,需要參與簽名
strData="POST&"+strPath+"&amt=123&bill_no=BillNo_123&openid=55107C3B8501CD7CBD90AEE4626E6D17&ts=1553322984&AppSecret=HyVFkGl5F5OQWJZZaNzBBg=="
// 計算簽名前的字符串:
POST&%2Fpay%2Fcallback&amt=123&bill_no=BillNo_123&openid=55107C3B8501CD7CBD90AEE4626E6D17&ts=1553322984&AppSecret=HyVFkGl5F5OQWJZZaNzBBg==
4.hmac使用sha256算法得到的結(jié)果為
計算得到的簽名:
f749f67b751fa80f27ddc0b7c8d2821aeda162ea22b323cd64a2c8056c2736f0
5.PHP示例
$h = hash_hmac('sha256', 'POST&%2Fpay%2Fcallback&amt=123&bill_no=BillNo_123&openid=55107C3B8501CD7CBD90AEE4626E6D17&ts=1553322984&AppSecret=HyVFkGl5F5OQWJZZaNzBBg==', 'HyVFkGl5F5OQWJZZaNzBBg==', true);
var_dump(bin2hex($h));
回調(diào)接口需要返回一個json
屬性 | 類型 | 默認(rèn)值 | 必填 | 說明 |
---|---|---|---|---|
code | number | 是 | code等于0,表示成功,其他是失敗 | |
msg | string | 是 | 錯誤描述 |
{
"code":0,
"msg":""
}
查詢支付狀態(tài) 本接口應(yīng)在服務(wù)器端調(diào)用,詳細(xì)說明參見服務(wù)端API。 玩家下單購買道具后,如果開發(fā)商沒有收到支付支付通知,可以通過這個接口查詢支付結(jié)果
POST
https://api.q.qq.com/api/json/openApiPay/CheckGamePay?access_token=ACCESS_TOKEN
查詢余額
本接口應(yīng)在服務(wù)器端調(diào)用,詳細(xì)說明參見服務(wù)端API。
POST https://api.q.qq.com/api/json/openApiPay/GetBalance?access_token=ACCESS_TOK
屬性 | 類型 | 默認(rèn)值 | 必填 | 說明 |
---|---|---|---|---|
openid | string | 是 | 用戶唯一標(biāo)識符 | |
appid | string | 是 | 小程序 appId | |
sig | string | 是 | 以上參數(shù)("user_ip"字段除外,含可選最多11個)+uri+session_key,用 HMAC-SHA256簽名 | |
access_token | string | 是 | 接口調(diào)用憑證 |
返回值
返回的 JSON 數(shù)據(jù)包
屬性 | 類型 | 說明 |
---|---|---|
errcode | number | 錯誤碼 |
errmsg | string | 錯誤信息 |
remainder | number | 金幣余額 |
errcode 的合法值
值 | 說明 |
---|---|
0 | 請求成功 |
-1 | 系統(tǒng)繁忙,此時請開發(fā)者稍候再試 |
-3000 | access_token 校驗失敗,access_token需要放在url中 |
90011 | sig簽名錯誤 |
POST 數(shù)據(jù)格式:JSON
{
"openid":"55107C3B8501CD7CBD90AEE4626E6D17",
"appid":"1107981003",
"sig":"9a721574bbf7fbfc68f15edd7e9cc355d6a95e2d946ecd4e04b708c4206665b4",
}
1.請求方法: POST 2.下單url中的path(/api/json/openApiPay/GetBalance)部分,做標(biāo)準(zhǔn)的url Encoding, 標(biāo)準(zhǔn)請參考《URL Encoding 》 3.請求參數(shù)按字典排序,并用"&"拼接, 注意空字段不參與排序
appid=1107981003&openid=55107C3B8501CD7CBD90AEE4626E6D17```
4.拼接session_key,用戶登錄時開發(fā)者后臺可以通過code2session接口獲取到
session_key=VUNQZ0hRYURxNlZZbmNOZw==
5.簽名前的字符串如下圖
POST&%2Fapi%2Fjson%2FopenApiPay%2FCheckGamePay&appid=1107981003&bill_no=69ae13a3a87f2551109a2ed26bc704201f56d664&openid=55107C3B8501CD7CBD90AEE4626E6D17&prepay_id=beaf257883b098007ca821e1c59f7f7a&session_key=VUNQZ0hRYURxNlZZbmNOZw==```
6.HMAC-SHA256得到的簽名結(jié)果
$h = hash_hmac('sha256', 'POST&%2Fapi%2Fjson%2FopenApiPay%2FCheckGamePay&appid=1107981003&bill_no=69ae13a3a87f2551109a2ed26bc704201f56d664&openid=55107C3B8501CD7CBD90AEE4626E6D17&prepay_id=beaf257883b098007ca821e1c59f7f7a&session_key=VUNQZ0hRYURxNlZZbmNOZw==')
var_dump(bin2hex($h));
簽名:
9a721574bbf7fbfc68f15edd7e9cc355d6a95e2d946ecd4e04b708c4206665b4
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: