場(chǎng)景介紹
在AppGallery Connect的中創(chuàng)建的商品,進(jìn)行了商品營(yíng)銷配置后,可以直接在華為應(yīng)用市場(chǎng)或游戲中心的應(yīng)用詳情頁中展示商品宣傳圖、商品名稱、商品描述,供用戶點(diǎn)擊購(gòu)買。
注意
應(yīng)用外支付功能目前僅支持發(fā)布地區(qū)包含中國(guó)大陸的應(yīng)用。
應(yīng)用外支付分為以下兩種方式:
DeepLink方式:用戶點(diǎn)擊購(gòu)買應(yīng)用市場(chǎng)或游戲中心的商品后跳轉(zhuǎn)到您自己的APP商品地址,該地址可直接拉起您的APP,由APP自行完成后續(xù)的支付和發(fā)貨。
商品直購(gòu)方式:分為兌換碼支付和華為應(yīng)用市場(chǎng)發(fā)起支付。
兌換碼支付:您可以提前在華為AppGallery Connect中配置商品兌換碼,用戶使用兌換碼購(gòu)買華為應(yīng)用市場(chǎng)的商品后,華為服務(wù)器直接通知開發(fā)者服務(wù)器完成商品發(fā)貨。
華為應(yīng)用市場(chǎng)發(fā)起支付:用戶點(diǎn)擊購(gòu)買華為應(yīng)用市場(chǎng)的商品后由華為應(yīng)用市場(chǎng)發(fā)起支付,在支付完成后由華為服務(wù)器通知開發(fā)者服務(wù)器完成商品發(fā)貨。
DeepLink方式的應(yīng)用外支付僅需在配置商品營(yíng)銷信息時(shí)配置DeepLink地址,用戶點(diǎn)擊購(gòu)買后將直接跳轉(zhuǎn)到該DeepLink地址,后續(xù)支付和發(fā)貨流程與應(yīng)用內(nèi)商品支付流程一致,參見華為支付開發(fā)指南。
兌換碼支付方式僅需參考配置虛擬商品配置商品兌換碼,并在配置商品營(yíng)銷信息時(shí)配置發(fā)貨地址即可,無需額外代碼開發(fā)。
華為應(yīng)用市場(chǎng)發(fā)起支付的方式需要您開發(fā)商品直購(gòu)和掉單查詢功能,本章節(jié)將具體介紹此功能的開發(fā)。
前提條件
已參見配置商品營(yíng)銷信息配置商品營(yíng)銷信息。
商品直購(gòu)
接收發(fā)貨通知:
商品直購(gòu)成功后,華為數(shù)字商品服務(wù)器會(huì)調(diào)用通知發(fā)貨接口通知開發(fā)者服務(wù)器對(duì)已經(jīng)完成購(gòu)買的商品發(fā)貨。
請(qǐng)求消息樣例:
POST {第三方應(yīng)用服務(wù)器url} HTTP/1.1
Content Type : application/json ; charset=UTF-8
{
"data": {
"developerId": "234234234",
"appId": "1231333",
"orderId": "sdfsfff32324324234234",
"productNo": "product344",
"openId": "openId13123",
"count": 1,
"ts": 12312313123131123
},
"sign": "string"
}
參見獲取驗(yàn)簽公鑰獲取用于驗(yàn)證訂單信息的公鑰。
開發(fā)者服務(wù)器收到發(fā)貨通知后,參考驗(yàn)簽示例對(duì)發(fā)貨通知消息的sign字段驗(yàn)簽,并根據(jù)查詢訂單相關(guān)數(shù)據(jù)的有效性,向華為服務(wù)器返回處理結(jié)果。
返回消息樣例:
{
"error": {
"errorCode": 0,
"errorMsg": "string"
}
}
or
{
"data": {
"result": 0
}
}
根據(jù)商品ID和當(dāng)前用戶信息完成發(fā)貨操作,此部分由開發(fā)者自行完成。
發(fā)貨成功主動(dòng)通知:
參考創(chuàng)建API客戶端章節(jié)創(chuàng)建用于訪問華為服務(wù)器接口的API客戶端。
說明
API客戶端僅需創(chuàng)建一次。
調(diào)用獲取Token接口獲取用于API客戶端認(rèn)證的的access_token。
開發(fā)者服務(wù)器在發(fā)貨成功后調(diào)用發(fā)貨成功通知接口向華為服務(wù)器發(fā)送通知,傳入access_token。通知成功后華為服務(wù)器刷新訂單狀態(tài)。
請(qǐng)求消息樣例:
{
"orderId": "string",
"productNo": "string",
"openId": "string",
"status": 0,
"ts": 12312313123131123
}
響應(yīng)消息樣例:
{
"error": {
"errorCode": 0,
"errorMsg": "string"
}
}
or
{
"data": {
"result": 0
}
}
掉單查詢
商品直購(gòu)后通知發(fā)貨過程可能發(fā)生通知發(fā)貨失敗而產(chǎn)生掉單,此時(shí)華為服務(wù)會(huì)將該訂單標(biāo)識(shí)為未發(fā)貨狀態(tài)。當(dāng)應(yīng)用啟動(dòng)時(shí)需要主動(dòng)查詢當(dāng)前華為帳號(hào)是否有未發(fā)貨的訂單,如果有掉單數(shù)據(jù)需通知開發(fā)者服務(wù)器發(fā)貨。開發(fā)者服務(wù)器完成發(fā)貨后通知華為服務(wù)器發(fā)貨成功,華為服務(wù)器將訂單狀態(tài)修改為發(fā)貨狀態(tài)。
應(yīng)用啟動(dòng)時(shí)主動(dòng)調(diào)用JosApps.getProductClient方法初始化ProductClient實(shí)例。
ProductClient productClient = JosApps.getProductClient(this);
應(yīng)用調(diào)用ProductClient.getMissProductOrder方法查詢未發(fā)貨的訂單。
說明
本步驟僅為建議,您可根據(jù)查詢結(jié)果感知當(dāng)前設(shè)備中是否存在已登錄的華為帳號(hào),正式的查詢將在步驟4中進(jìn)行。
HMS Core SDK會(huì)根據(jù)當(dāng)前設(shè)備中已經(jīng)登錄授權(quán)的華為帳號(hào)查詢?cè)搸ぬ?hào)的掉單數(shù)據(jù)。如果當(dāng)前設(shè)備中未登錄華為帳號(hào),則不返回?cái)?shù)據(jù)。
Task<List<ProductOrderInfo>> task = productClient.getMissProductOrder(this);
task.addOnSuccessListener(new OnSuccessListener<List<ProductOrderInfo>>() {
@Override
public void onSuccess(List<ProductOrderInfo> productOrders) {
if (productOrders != null) {
for (ProductOrderInfo productOrderInfo : productOrders) {
String productNo = productOrderInfo.getProductNo();
String tradeId = productOrderInfo.getTradeId();
showLog("productNo:" + productNo + ",tradeId:" + tradeId);
}
} else {
showLog("product list is null");
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
if (e instanceof ApiException) {
ApiException apiException = (ApiException) e;
showLog("get miss product info failed:" + apiException.getStatusCode());
}
}
});
引導(dǎo)用戶進(jìn)行華為帳號(hào)授權(quán)登錄。
說明
為了更好的用戶體驗(yàn),建議您將華為帳號(hào)與您自己的帳號(hào)體系綁定,以便于用戶可以同時(shí)瀏覽華為帳號(hào)和非華為帳號(hào)購(gòu)買的訂單。
用戶的華為帳號(hào)授權(quán)登錄后,應(yīng)用再次調(diào)用ProductClient.getMissProductOrder方法確認(rèn)掉單數(shù)據(jù)。
應(yīng)用調(diào)用ProductOrderInfo.getSign方法獲取訂單信息中的簽名字符串,使用獲取驗(yàn)簽公鑰中獲取的驗(yàn)簽公鑰參考對(duì)掉單數(shù)據(jù)驗(yàn)簽對(duì)訂單信息進(jìn)行驗(yàn)簽。
驗(yàn)簽通過后,應(yīng)用客戶端通知應(yīng)用服務(wù)端發(fā)貨。開發(fā)者服務(wù)器發(fā)貨完成后向華為服務(wù)發(fā)送通知