|  | 
 
| 支付宝订阅消息推送 1、前言
 2、支付宝官方文档在小程序中用到了支付宝模板消息推送,本来支付宝那边有订阅消息的引导文档的,但是不太适合代码的复用,就把封装成了工具类(可能别的地方已经有了),能够直接复用,有需要的可以借鉴一番
 https://opendocs.alipay.com/mini/introduce/message支付宝API代码示例
 复制代码AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayOpenAppMiniTemplatemessageSendRequest request = new AlipayOpenAppMiniTemplatemessageSendRequest();
request.setBizContent("{" +
""to_user_id":"2088102122458832"," +
""form_id":"2017010100000000580012345678"," +
""user_template_id":"MDI4YzIxMDE2M2I5YTQzYjUxNWE4MjA4NmU1MTIyYmM="," +
""page":"page/component/index"," +
""data":"{\\"keyword1\\": {\\"value\\" : \\"12:00\\"},\\"keyword2\\": {\\"value\\" : \\"20180808\\"},\\"keyword3\\": {\\"value\\" : \\"支付宝\\"}}"" +
"  }");
AlipayOpenAppMiniTemplatemessageSendResponse response = alipayClient.execute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
可以看出,除了支付宝相关配置,最主要的是bizContent的设置,所以这边也是围绕bizContent去做封装
 3、工具类封装3.1、MessageData3.2、获取订阅消息相关数据
 3.3、支付宝API工具类小程序相关信息
 复制代码@Override
    public AlipayOpenAppMiniTemplatemessageSendResponse appMiniTemplateMsgPush(String clubCode, String alipayUid,
                                                                               String userTemplateId, String page, MessageData data) {
        AlipayConfig alipayConfig = this.getAlipayConfigByClub(clubCode);
        MiniTemplateMessage miniTemplateMessage = new MiniTemplateMessage();
        miniTemplateMessage.setTemplateId(userTemplateId);
        miniTemplateMessage.setUid(alipayUid);
        miniTemplateMessage.setPage(page);
        miniTemplateMessage.setData(data);
        return alipayOpenApiClient.appMiniTemplateMsgPush(miniTemplateMessage, alipayConfig);
    }
 
 3.4、测试可封装到支付宝工具类中
 复制代码/**
     * 模板消息推送
     *
     * @param miniTemplateMessage 推送内容
     * @param alipayInfo
     * @return
     */
    public AlipayOpenAppMiniTemplatemessageSendResponse appMiniTemplateMsgPush(MiniTemplateMessage miniTemplateMessage,
                                                                               AlipayConfig alipayInfo) {
        AlipayOpenAppMiniTemplatemessageSendRequest request = new AlipayOpenAppMiniTemplatemessageSendRequest();
        String bizContent = JSON.toJSONString(miniTemplateMessage);
        request.setBizContent(bizContent);
        return executeRequest(request, alipayInfo);
    }
    private <T extends AlipayResponse> T executeRequest(AlipayRequest request, AlipayConfig alipayInfo) throws AlipayOpenApiException {
        return executeRequest(request, null, alipayInfo);
    }
    private <T extends AlipayResponse> T executeRequest(AlipayRequest request,
                                                        String accessToken, AlipayConfig alipayInfo) throws AlipayOpenApiException {
        AlipayClient alipayClient = alipayClientFactory.getAlipayClient(alipayInfo);
        AlipayResponse response;
        try {
            response = null == accessToken ? alipayClient.execute(request) : alipayClient.execute(request, accessToken);
            if (!response.isSuccess()) {
                throw new AlipayOpenApiException(response, String.format("请求接口(%s),执行失败(%s)",
                        request.getApiMethodName(), response.getMsg()));
            }
            return (T) response;
        } catch (AlipayApiException e) {
            log.error(String.format("请求接口(%s),出现错误!", request.getApiMethodName()), e);
            throw new AlipayOpenApiException(null, String.format("请求接口(%s),出现错误!", request.getApiMethodName()));
        }
    }
 
 
 3.5、消息截图复制代码@PostMapping("")
    public Boolean testMsgPush(@RequestBody Parameter parameter) {
        log.info("parameter is {}", parameter);
        // 推送内容:活动名称、中奖号、开奖时间
        MessageData data = new MessageData();
        data.setKeyword1Value(parameter.getKeyword1());
        data.setKeyword2Value(parameter.getKeyword2());
        data.setKeyword3Value(parameter.getKeyword3());
        data.setKeyword4Value(parameter.getKeyword4());
        AlipayOpenAppMiniTemplatemessageSendResponse response
                = alipayService.appMiniTemplateMsgPush("manchester", parameter.getAlipayUid(),
                "xxx", "xxx", data);
        log.info("response is {}", response.getSubMsg());
        return true;
    }
@Data
@ToString
class Parameter {
    private String keyword1;
    private String keyword2;
    private String keyword3;
    private String keyword4;
    private String alipayUid;
}
 支付宝订阅消息推送   
 
 
 支付宝订阅消息推送   
 
 
 | 
 |