智慧商圈支付寶小程序(ISV系統服務商開發模式)

一、產品成果

在這裏插入圖片描述
在這裏插入圖片描述


二、前言

本次支付寶小程序和以前支付寶小程序不同是,以前小程序主體就是個普通的小程序,這次我們是站在第三方ISV(服務商)角度來進行開發。
ISV 幫助商戶開發小程序時可使用的兩種開發模式:

  1. 模板開發模式(我們這次方案)
  2. 代開發模式

模板開發模式支持 ISV 通過 API 批量處理商戶小程序,所以該模式比較適合有大量同類型商家客戶的ISV;代開發模式則比較適合商戶定製化小程序。
在這裏插入圖片描述

2.1 模板開發模式

模板開發模式下 ISV 可以通過 API 接口批量處理商家小程序,比如 ISV 通過模板開發模式服務了 1 萬個不同的餐飲小程序,如果需要對這 1 萬個不同的小程序做版本升級時,在模板開發模式下,可以實現用 API 接口構建、提審、上架這 1 萬個不同的小程序。在模板開發模式下商戶把自己的小程序授權給 ISV 的三方應用,讓 ISV 去幫商戶實現商戶小程序的代碼構建、提審以及商戶小程序上架。在商戶把商戶小程序授權給 ISV 的三方應用後,商戶小程序的代碼只能通過服務商三方應用下的小程序模板代碼去構建。

業務特點:

開發流程:ISV 先開發小程序模板的代碼,然後通過小程序模板的代碼去構建商戶小程序的代碼;
快速開通:通過服務市場,商戶僅需完成訂購,即完成商戶小程序授權,通過模板快速生成自有商戶小程序;
批量維護:ISV 可代商戶實現小程序的快速批量更新。

ISV 想要開發自己的平臺小程序,大體上分爲三個步驟:

服務商入駐開放平臺;
創建平臺小程序;
開發、測試、提審、上架小程序。

2.2 模板開發模式接入流程

在這裏插入圖片描述

2.2.1 創建第三方應用

在這裏插入圖片描述

2.2.2 創建第三方模板

在這裏插入圖片描述

2.2.3 ISV開發模板小程序

小程序模板在 IDE 調試時,所需要用到的服務端接口(用戶授權、訂單接口等),需要使用第三方應用的 AppId 和app_auth_token 進行測試。小程序模板不能直接調用後端接口,小程序模板授權給三方應用後,三方應用可以代小程序模板調用後端接口,具體調用方式爲:三方應用AppId + 三方應用祕鑰 + 小程序模板授權的 app_auth_token。
開發完後,需要將小程序模板提交審覈

2.2.4 商戶授權小程序

1.Isv發起授權(二維碼方式)如下圖:
2.應用市場,商戶訂閱服務

在這裏插入圖片描述

在這裏插入圖片描述

支付寶開放平臺商家授權應用會多出一條授權記錄
在這裏插入圖片描述

授權成功後,開發權限就託管給第三方,自己不能在此基礎上進行開發管理
在這裏插入圖片描述


2.3 ISV實施商戶小程序

條件:商戶已經自己建立了小程序,我們需要通過後臺構建商戶小程序

構建商戶小程序
小程序提交審覈
小程序上架
小程序二維碼生成(體驗碼,推廣碼)
小程序下架

在這裏插入圖片描述

在這裏插入圖片描述

審覈消息推送處理,同步升級原因
在這裏插入圖片描述


三、支付寶消息處理

消息服務是支付寶開放平臺爲提高應用API調用效率而推出面向開發者的一項消息服務,根據數據流向的不同分爲:主動推送服務( From螞蟻 )和消息迴流服務( To螞蟻 )。支付寶開放平臺消息服務接入文檔地址:https://docs.open.alipay.com/10381
在這裏插入圖片描述
在這裏插入圖片描述

3.1 接入方式

1.webSocket長連接
2.http(s)接入【我們使用這種】
在這裏插入圖片描述

注意:支付寶平臺配置應用網關地址(消息回調地址)

3.2 消息日誌
審覈拒絕:
2020-01-03 14:57:10.876 INFO [DubboServerHandler-10.1.25.217:20880-thread-12] alipay_mini_program_error 商圈支付寶小程序消息處理 msg:{"charset":"UTF-8","biz_content":"{\"mini_app_id\":\"2019112869472474\",\"bundle_id\":
\"com.alipay.alipaywallet\",\"audit_reason\":\"1. 純介紹文字的小程序無實際服務內容不準入: 小程序內容爲純黃頁,純廣告、圖片信息展示,無功能服務,請添加功能服務(例如購買、一鍵撥打諮詢、領取優惠券等功能)<br> 2. 應用描述沒有介紹清楚小程序服務內容:
應用描述沒有介紹小程序的服務內容,請從服務類介紹文案出發,寫清楚小程序主要提供什麼服務,提供什麼產品服務<br> \",\"mini_app_version\":\"0.0.7\"}","utc_timestamp":"1578034629715","sign":"uNYpcizxYnCJEGK0qwIJaJSmiM1GgsXUmi4wllRNiihwtXt
ujqrqG4CF+ZACGIhtkeyafTdxezDi+A+anrC++n53wuPsQknJDuVF9zxo8peneV97xdrUxke9Qnx3CL8/j+MXav7WkWIdRHk8POwnhPh3+vWForQc/81mSAYbUlEKex+dgVEWfzHBM0DiKbrLWcxtU9p4G2c3xoKgC8oO3aHZe3ad1vP1yvh6OVyjUT+DCiebR+DsxyBpgrpWfZ4eGjv6
0dzu95ShGqdB/svjZsN6g6WIFxnxy77RnP3oheyWPGQJqe/wCFcVZ1sjPBO3gVn5inqNchJtMgBicPTF3w==","app_id":"2019112669461031","version":"1.1","sign_type":"RSA2","notify_id":"2020010300262133505019411084005991","msg_method":
alipay.open.mini.version.audit.rejected"} 
 
 
審覈通過:
2020-01-03 15:05:20.366 INFO [DubboServerHandler-10.1.25.217:20880-thread-13] alipay_mini_program_error 商圈支付寶小程序消息處理 msg:{"charset":"UTF-8","biz_content":"{\"mini_app_id\":\"2019112769470319\",\"bundle_id\":
\"com.alipay.alipaywallet\",\"mini_app_version\":\"0.0.4\"}","utc_timestamp":"1578035119725","sign":"hqPi/R4S1D1z/wwIBpHo0wPjH6BOPdPHN4ih2nDDVCq1roByBTfqnKxBb5gaeEtcG2rjHed4MQRE1nnAFwlqB5hr5i/PNyKE4kFBhnu5qrVKiyIo1P
2/Tk7XkwXj8rLlNPIz02tElTuiG9sgrkH+2QAR6aRfrlp1PSR2Gty2/UkSy3jkI8S+AIvW8UUSy3LtFCIs1HaPIQrwBpZ0o8GcUPEMiu6WC6W6PeqPiYTDUjmwlVYRVZ3Y1Or9+lQcyZpEoRIN8+gcpCvyXuG2SFebBOoCc0guGNL092qHaKl05DmHw7b4LbrIb1G9CjUyD264xOIfZPd3
VZ4c47LanbegJQ==","app_id":"2019112669461031","version":"1.1","sign_type":"RSA2","notify_id":"2020010300262150519018683726102302","msg_method":"alipay.open.mini.version.audit.passed"}
3.3 驗籤
charset=GBK
biz_content={"app_auth_token":"197002BB1bcb984cc0ab4c5ebed9c592df6acX80","auth_app_id":"2016062401550921","user_id":"2088102285927804","app_id":"1970121701099429"}
utc_timestamp=1518170340170
sign=ABC
app_id=1970121701099429
version=1.1
sign_type=RSA2
notify_id=2798c9cf5f88f24bb7ab6a94733cab1m3l
msg_method=alipay.open.auth.appauth.cancelled
 
/**
 * 對報文進行驗籤
 * @param content 驗籤內容
 * @param sign 簽名值
 * @param publicKey 支付寶公鑰
 * @param charset 驗簽字符集
 * @param signType 簽名算法
 * @return 驗簽結果。true: 驗籤通過; false: 驗籤失敗
 * @throws AlipayApiException
 */
public static boolean rsaCheck(String content, String sign,String publicKey, String charset, String signType)
3.4 消息冪等性處理

由於消息存在重試機制,同一筆消息(相同notify_id)可能多次發送(網絡原因、商戶服務器原因、或者商戶接受處理成功但並未按要求打印success字符串等),消息接收方需要對同一個notifyId的多次消息投遞實現冪等。若之前相同的notify_id已處理成功。直接返回success字符串即可;

3.5 消息重投遞

一般情況下,25小時以內完成8次通知,除了第一次是實時投遞外,後續的每次重試都會間隔一段時間,間隔頻率一般是:2m,10m,10m,1h,2h,6h,15h(第二次消息投遞是在第一次投遞失敗後的2分鐘;第三次投遞是在第二次投遞失敗後的10分鐘,以此類推)


四、支付寶ISV服務商實施商戶小程序接口

在這裏插入圖片描述

4.1 BusinessMiniProgramBuildFacade.java
package com.dfire.soa.wechat.facade.isv;
 
import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayOpenMiniVersionBuildQueryRequest;
import com.alipay.api.request.AlipayOpenMiniVersionDeleteRequest;
import com.alipay.api.request.AlipayOpenMiniVersionUploadRequest;
import com.alipay.api.response.AlipayOpenMiniVersionBuildQueryResponse;
import com.alipay.api.response.AlipayOpenMiniVersionDeleteResponse;
import com.alipay.api.response.AlipayOpenMiniVersionUploadResponse;
import com.twodfire.exception.BizException;
import org.springframework.stereotype.Service;
 
import java.util.concurrent.TimeUnit;
 
/**
 * User: lanxinghua
 * Date: 2019/12/25 19:47
 * Desc: ISV小程序模板服務-商戶小程序構建
 * 文檔地址:https://docs.alipay.com/mini/isv/fir962
 */
@Service
public class BusinessMiniProgramBuildFacade extends IsvBaseFacade{
    private static final String VERSION_CREATE_SUCCESS = "6";
 
 
    /**
     * 調用alipay.open.mini.version.upload 小程序基於模板上傳版本(未調通,模板需要審覈通過)
     * @param templateVersion
     * @param entityId
     * @param memberSystemId
     * @param appId
     * @param appVersion
     * @param appName
     */
    public void buildMiniProgramByTemplate(String templateVersion, String entityId, String memberSystemId,String appId, String appVersion, String appName){
        try {
            AlipayClient alipayClient = getAlipayClient();
            AlipayOpenMiniVersionUploadRequest request = new AlipayOpenMiniVersionUploadRequest();
            request.setBizContent("{" +
                    "\"template_version\":\""+ templateVersion +"\"," +
                    "\"ext\":\"{\\\"extEnable\\\": true, \\\"extAppid\\\":"+ appId +"," +
                    "\\\"ext\\\": {\\\"appId\\\": \\\"" + appId + "\\\", \\\"appName\\\": \\\""+appName+"\\\", \\\"entityId\\\": \\\""+entityId+"\\\", \\\"memberSystemId\\\": \\\""+memberSystemId+"\\\"}, " +
                    "\\\"window\\\": {\\\"navigationBarTitleText\\\": \\\""+appName+"\\\"}}\"," +
                    "\"template_id\":\""+ aliPayAppProperties.getTemplateId() +"\"," +
                    "\"app_version\":\""+appVersion+"\"," +
                    "\"bundle_id\":\"com.alipay.alipaywallet\"" +
                    "  }");
            String appAuthToken = getAppAuthToken(appId);
            request.putOtherTextParam("app_auth_token", appAuthToken);
            AlipayOpenMiniVersionUploadResponse response = alipayClient.execute(request);
            checkRequestResult(response);
        }catch (Exception e){
            throw new BizException(e.getMessage());
        }
    }
 
 
    /**
     * 構建查詢接口 alipay.open.mini.version.build.query  接口輪詢(建議3-5秒)
     * return:create_status  0-構建排隊中;1-正在構建;2-構建成功;3-構建失敗;5-構建超時;6-版本創建成功
     */
    public boolean versionBuildSuccess(String appId, String appVersion){
        Boolean versionCreateSuccess = false;
        for (int i = 1; i < 6; i++) {
            try {
                AlipayClient alipayClient = getAlipayClient();
                AlipayOpenMiniVersionBuildQueryRequest request = new AlipayOpenMiniVersionBuildQueryRequest();
                request.setBizContent("{" +
                        "\"app_version\":\""+appVersion+"\"," +
                        "\"bundle_id\":\"com.alipay.alipaywallet\"" +
                        "  }");
                String appAuthToken = getAppAuthToken(appId);
                request.putOtherTextParam("app_auth_token", appAuthToken);
                AlipayOpenMiniVersionBuildQueryResponse response = alipayClient.execute(request);
                checkRequestResult(response);
                if (VERSION_CREATE_SUCCESS.equals(response.getCreateStatus())){
                    versionCreateSuccess = true;
                    break;
                }
                try {
                    TimeUnit.SECONDS.sleep(10 * i);
                }catch (Exception sleepE){
                    sleepE.printStackTrace();
                }
            }catch (Exception e){
                continue;
            }
        }
        return versionCreateSuccess;
    }
 
 
    /**
     * 刪除商戶小程序版本 alipay.open.mini.version.delete
     * 有開發狀態的版本才能被刪除,默認最多允許20個開發中的版本
     */
    public void delAppVersion(String appId, String appVersion){
        try {
            AlipayClient alipayClient = getAlipayClient();
            AlipayOpenMiniVersionDeleteRequest request = new AlipayOpenMiniVersionDeleteRequest();
            request.setBizContent("{" +
                    "\"app_version\":\""+appVersion+"\"," +
                    "\"bundle_id\":\"com.alipay.alipaywallet\"" +
                    "  }");
            String appAuthToken = getAppAuthToken(appId);
            request.putOtherTextParam("app_auth_token", appAuthToken);
            AlipayOpenMiniVersionDeleteResponse response = alipayClient.execute(request);
            checkRequestResult(response);
        }catch (Exception e){
            throw new BizException(e.getMessage());
        }
    }
}

4.2 BusinessMiniProgramAuditFacade.java
package com.dfire.soa.wechat.facade.isv;
 
import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayClient;
import com.alipay.api.FileItem;
import com.alipay.api.request.AlipayOpenMiniVersionAuditApplyRequest;
import com.alipay.api.request.AlipayOpenMiniVersionAuditedCancelRequest;
import com.alipay.api.request.AlipayOpenMiniVersionDetailQueryRequest;
import com.alipay.api.response.AlipayOpenMiniVersionAuditApplyResponse;
import com.alipay.api.response.AlipayOpenMiniVersionAuditedCancelResponse;
import com.alipay.api.response.AlipayOpenMiniVersionDetailQueryResponse;
import com.dfire.consumer.util.LoggerUtil;
import com.dfire.soa.thirdInternal.common.constants.BusinessMiniProgramStatusEnum;
import com.dfire.soa.thirdInternal.common.domain.miniprogram.BusinessMiniprogramAuditBo;
import com.dfire.soa.wechat.exception.WeChatException;
import com.dfire.soa.wechat.logger.LoggerMarkers;
import com.dfire.soa.wechat.logger.WechatLoggerFactory;
import org.springframework.stereotype.Service;
 
/**
 * User: lanxinghua
 * Date: 2019/12/25 20:04
 * Desc: ISV小程序模板服務-商戶小程序審覈
 * 文檔地址:https://opendocs.alipay.com/mini/isv/kow82t
 */
@Service
public class BusinessMiniProgramAuditFacade extends IsvBaseFacade {
 
    /**
     *  商戶小程序提交審覈 alipay.open.mini.version.audit.apply
     *  必填字段一個都不能少,提審上架後信息無法修改了
     */
    public String auditApply(String appId, String appVersion, String appName, String desc, BusinessMiniprogramAuditBo auditBo) {
        String resultMsg = null;
        LoggerUtil.info(WechatLoggerFactory.ALIPAY, LoggerMarkers.ALIPAY_MINI_PROGRAM_INFO, "提交審覈:" + appName);
        AlipayOpenMiniVersionAuditApplyResponse response = null;
        try {
            AlipayClient alipayClient = getAlipayClient();
            AlipayOpenMiniVersionAuditApplyRequest request = new AlipayOpenMiniVersionAuditApplyRequest();
            request.setAppVersion(appVersion);
            request.setAppName(appName);
            request.setVersionDesc(desc);
            // 小程序服務區域類型
            request.setRegionType("CHINA");
            request.putOtherTextParam("app_auth_token", getAppAuthToken(appId));
            response = alipayClient.execute(request);
            if ("CAN_NOT_SUBMIT_WITH_AUDIT_GRAY".equals(response.getSubCode()) || "CAN_NOT_SUBMIT_WITHOUT_INIT".equals(response.getSubCode())){
                resultMsg = response.getSubMsg();
                BusinessMiniProgramStatusEnum statusEnum = BusinessMiniProgramStatusEnum.getByType(auditBo.getAppStatus());
                switch (statusEnum){
                    case AUDIT_REJECT:{ // 撤銷當前審覈失敗的版本
                        cancelAudited(appId, auditBo.getCurrentVersion());
                        break;
                    }
                    case RELEASE:
                    case WAIT_RELEASE:{
                       break;
                    }
                    default:{
                        break;
                    }
                }
            }
            checkRequestResult(response);
        }catch (Exception e){
            LoggerUtil.error(WechatLoggerFactory.ALIPAY, LoggerMarkers.ALIPAY_MINI_PROGRAM_INFO, "提交審覈失敗", e);
            return e.getMessage();
        }
        return resultMsg;
    }
 
    /**
     * 小程序查詢審覈狀態 alipay.open.mini.version.detail.query
     * INIT-開發中
     * AUDITING-審覈中
     * WAIT_RELEASE-審覈通過
     * AUDIT_REJECT-審覈駁回
     * RELEASE-已上架
     * GRAY-灰度中
     * OFFLINE-下架
     */
    public void queryAuditDetail(String appId, String appVersion){
        try {
            AlipayClient alipayClient = getAlipayClient();
            AlipayOpenMiniVersionDetailQueryRequest request = new AlipayOpenMiniVersionDetailQueryRequest();
            request.setBizContent("{" +
                    "\"app_version\":\""+appVersion+"\"," +
                    "\"bundle_id\":\"com.alipay.alipaywallet\"" +
                    "  }");
            String appAuthToken = getAppAuthToken(appId);
            request.putOtherTextParam("app_auth_token", appAuthToken);
            AlipayOpenMiniVersionDetailQueryResponse response = alipayClient.execute(request);
            checkRequestResult(response);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
 
 
 
    /**
     * 商戶小程序撤回審覈  alipay.open.mini.version.audited.cancel
     * 審覈狀態的情況下才能退回開發
     */
    public void cancelAudited(String appId, String appVersion){
        try {
            AlipayClient alipayClient = getAlipayClient();
            AlipayOpenMiniVersionAuditedCancelRequest request = new AlipayOpenMiniVersionAuditedCancelRequest();
            request.setBizContent("{" +
                    "\"app_version\":\""+appVersion+"\"," +
                    "\"bundle_id\":\"com.alipay.alipaywallet\"" +
                    "  }");
            String appAuthToken = getAppAuthToken(appId);
            request.putOtherTextParam("app_auth_token", appAuthToken);
            AlipayOpenMiniVersionAuditedCancelResponse response = alipayClient.execute(request);
            checkRequestResult(response);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

4.3 BusinessMiniProgramOnlineFacade.java
package com.dfire.soa.wechat.facade.isv;
 
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayOpenMiniVersionGrayCancelRequest;
import com.alipay.api.request.AlipayOpenMiniVersionGrayOnlineRequest;
import com.alipay.api.request.AlipayOpenMiniVersionOnlineRequest;
import com.alipay.api.response.AlipayOpenMiniVersionGrayCancelResponse;
import com.alipay.api.response.AlipayOpenMiniVersionGrayOnlineResponse;
import com.alipay.api.response.AlipayOpenMiniVersionOnlineResponse;
import org.springframework.stereotype.Service;
 
/**
 * User: lanxinghua
 * Date: 2019/12/25 20:14
 * Desc: ISV小程序模板服務-商戶小程序上架
 * 文檔地址:https://opendocs.alipay.com/mini/isv/mkqqhl
 */
@Service
public class BusinessMiniProgramOnlineFacade extends IsvBaseFacade {
 
    /**
     *  商戶小程序灰度上架 alipay.open.mini.version.gray.online
     */
    public void grayOnline(String appId, String appVersion){
        try {
            AlipayClient alipayClient = getAlipayClient();
            AlipayOpenMiniVersionGrayOnlineRequest request = new AlipayOpenMiniVersionGrayOnlineRequest();
            request.setBizContent("{" +
                    "\"app_version\":\""+appVersion+"\"," +
                    "\"gray_strategy\":\"p10\"," +
                    "\"bundle_id\":\"com.alipay.alipaywallet\"" +
                    "  }");
            request.putOtherTextParam("app_auth_token", getAppAuthToken(appId));
            AlipayOpenMiniVersionGrayOnlineResponse response = alipayClient.execute(request);
            checkRequestResult(response);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
 
 
    /**
     * 商戶小程序灰度結束 alipay.open.mini.version.gray.cancel
     */
    public void grayCancel(String appId, String appVerion){
        try {
            AlipayClient alipayClient = getAlipayClient();
            AlipayOpenMiniVersionGrayCancelRequest request = new AlipayOpenMiniVersionGrayCancelRequest();
            request.setBizContent("{" +
                    "\"app_version\":\""+appVerion+"\"," +
                    "\"bundle_id\":\"com.alipay.alipaywallet\"" +
                    "  }");
            request.putOtherTextParam("app_auth_token", getAppAuthToken(appId));
            AlipayOpenMiniVersionGrayCancelResponse response = alipayClient.execute(request);
            checkRequestResult(response);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
 
 
    /**
     * 小程序上架 alipay.open.mini.version.offline
     */
    public void offlineApp(String appId, String appVersion){
        try {
            AlipayClient alipayClient = getAlipayClient();
            AlipayOpenMiniVersionOnlineRequest request = new AlipayOpenMiniVersionOnlineRequest();
            request.setBizContent("{" +
                    "\"app_version\":\""+appVersion+"\"," +
                    "\"bundle_id\":\"com.alipay.alipaywallet\"" +
                    "  }");
            request.putOtherTextParam("app_auth_token", getAppAuthToken(appId));
            AlipayOpenMiniVersionOnlineResponse response = alipayClient.execute(request);
            checkRequestResult(response);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

4.4 BusinessMiniProgramOfflineFacade.java
package com.dfire.soa.wechat.facade.isv;
 
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayOpenMiniVersionOfflineRequest;
import com.alipay.api.response.AlipayOpenMiniVersionOfflineResponse;
import org.springframework.stereotype.Service;
 
/**
 * User: lanxinghua
 * Date: 2019/12/25 20:14
 * Desc: ISV小程序模板服務-商戶小程序下架
 * 文檔地址:https://opendocs.alipay.com/mini/isv/fir962
 */
@Service
public class BusinessMiniProgramOfflineFacade extends IsvBaseFacade {
 
    /**
     * 商戶小程序下架 alipay.open.mini.version.offline
     */
    public void offlineApp(String appId, String appVersion){
        try {
            AlipayClient alipayClient = getAlipayClient();
            AlipayOpenMiniVersionOfflineRequest request = new AlipayOpenMiniVersionOfflineRequest();
            request.setBizContent("{" +
                    "\"app_version\":\""+appVersion+"\"," +
                    "\"bundle_id\":\"com.alipay.alipaywallet\"" +
                    "  }");
            request.putOtherTextParam("app_auth_token", getAppAuthToken(appId));
            AlipayOpenMiniVersionOfflineResponse response = alipayClient.execute(request);
            checkRequestResult(response);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

4.5 BusinessMiniProgramQrcodeFacade.java
package com.dfire.soa.wechat.facade.isv;
 
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayOpenAppQrcodeCreateRequest;
import com.alipay.api.request.AlipayOpenMiniExperienceCancelRequest;
import com.alipay.api.request.AlipayOpenMiniExperienceCreateRequest;
import com.alipay.api.request.AlipayOpenMiniExperienceQueryRequest;
import com.alipay.api.response.AlipayOpenAppQrcodeCreateResponse;
import com.alipay.api.response.AlipayOpenMiniExperienceCancelResponse;
import com.alipay.api.response.AlipayOpenMiniExperienceCreateResponse;
import com.alipay.api.response.AlipayOpenMiniExperienceQueryResponse;
import org.springframework.stereotype.Service;
 
/**
 * User: lanxinghua
 * Date: 2019/12/25 20:10
 * Desc:
 */
@Service
public class BusinessMiniProgramQrcodeFacade extends IsvBaseFacade {
 
    /**
     * alipay.open.app.qrcode.create  商戶小程序二維碼生成
     * query_param:小程序的啓動參數,onLaunch
     * url_param:page/component/test
     */
    public void createQrcode(String appId, String urlParam, String queryParam, String desc){
        try {
            AlipayClient alipayClient = getAlipayClient();
            AlipayOpenAppQrcodeCreateRequest request = new AlipayOpenAppQrcodeCreateRequest();
            request.setBizContent("{" +
                    "\"url_param\":\""+urlParam+"\"," +
                    "\"query_param\":\""+queryParam+"\"," +
                    "\"describe\":\""+desc+"\"" +
                    "  }");
            request.putOtherTextParam("app_auth_token", getAppAuthToken(appId));
            AlipayOpenAppQrcodeCreateResponse response = alipayClient.execute(request);
            checkRequestResult(response);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
 
 
    /**
     * alipay.open.mini.experience.create(小程序生成體驗版)
     */
    public void createExperience(String appId, String appVersion){
        try {
            AlipayClient alipayClient = getAlipayClient();
            AlipayOpenMiniExperienceCreateRequest request = new AlipayOpenMiniExperienceCreateRequest();
            request.setBizContent("{" +
                    "\"app_version\":\""+appVersion+"\"," +
                    "\"bundle_id\":\"com.alipay.alipaywallet\"" +
                    "  }");
            request.putOtherTextParam("app_auth_token", getAppAuthToken(appId));
            AlipayOpenMiniExperienceCreateResponse response = alipayClient.execute(request);
            checkRequestResult(response);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
 
 
    /**
     * alipay.open.mini.experience.query(小程序體驗版狀態查詢接口)
     * expVersionPackged-體驗版打包成功
     * expVersionPackaging-體驗版打包中
     * notExpVersion-非體驗版
     */
    public void queryExperienceStatus(String appId, String appVersion){
        try {
            AlipayClient alipayClient = getAlipayClient();
            AlipayOpenMiniExperienceQueryRequest request = new AlipayOpenMiniExperienceQueryRequest();
            request.setBizContent("{" +
                    "\"app_version\":\""+appVersion+"\"," +
                    "\"bundle_id\":\"com.alipay.alipaywallet\"" +
                    "  }");
            request.putOtherTextParam("app_auth_token", getAppAuthToken(appId));
            AlipayOpenMiniExperienceQueryResponse response = alipayClient.execute(request);
            checkRequestResult(response);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
 
 
    /**
     * alipay.open.mini.experience.cancel(小程序取消體驗版)
     */
    public void cancelExperience(String appId, String appVersion){
        try {
            AlipayClient alipayClient = getAlipayClient();
            AlipayOpenMiniExperienceCancelRequest request = new AlipayOpenMiniExperienceCancelRequest();
            request.setBizContent("{" +
                    "\"app_version\":\""+appVersion+"\"," +
                    "\"bundle_id\":\"com.alipay.alipaywallet\"" +
                    "  }");
            request.putOtherTextParam("app_auth_token", getAppAuthToken(appId));
            AlipayOpenMiniExperienceCancelResponse response = alipayClient.execute(request);
            checkRequestResult(response);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章