QQ小游戲 小游戲支付

2020-07-16 15:51 更新

小游戲支付

小游戲支付提供玩家在小游戲中購買道具的能力

# 業(yè)務(wù)流程

主要的流程: 1、小程序內(nèi)調(diào)用登錄接口,獲取到用戶的openid 2、開發(fā)者 server調(diào)用下單接口 4、開發(fā)者 server接收支付通知

開通小游戲支付

# 上架道具

開發(fā)者需要在QQ小程序開發(fā)者管理端上架道具

預(yù)下單

本接口應(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)用憑證

返回值

Object

返回的 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

請求參數(shù)

屬性 類型 默認(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

POST 數(shù)據(jù)格式:JSON

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ù)的完整性。

  1. 用戶的 AppSecret: HyVFkGl5F5OQWJZZaNzBBg==

  1. 用于簽名的字符串為: 對開發(fā)者在管理端 配置回調(diào)url中的path部分,做標(biāo)準(zhǔn)的url Encoding, 標(biāo)準(zhǔn)請參考《URL Encoding 》
    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

請求參數(shù)

屬性 類型 默認(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)用憑證

返回值

Object

返回的 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
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號