依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

【好消息,好消息,好消息】VIP会员可以发表文章赚积分啦 !
查看: 41|回复: 0

支付宝订阅消息推送

[复制链接] 主动推送

1万

主题

1万

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
15538
发表于 前天 11:58 | 显示全部楼层 |阅读模式
支付宝订阅消息推送
1、前言
  • 在小程序中用到了支付宝模板消息推送,本来支付宝那边有订阅消息的引导文档的,但是不太适合代码的复用,就把封装成了工具类(可能别的地方已经有了),能够直接复用,有需要的可以借鉴一番
2、支付宝官方文档
  • https://opendocs.alipay.com/mini/introduce/message
  • 支付宝API代码示例
    1. AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
    2. AlipayOpenAppMiniTemplatemessageSendRequest request = new AlipayOpenAppMiniTemplatemessageSendRequest();
    3. request.setBizContent("{" +
    4. ""to_user_id":"2088102122458832"," +
    5. ""form_id":"2017010100000000580012345678"," +
    6. ""user_template_id":"MDI4YzIxMDE2M2I5YTQzYjUxNWE4MjA4NmU1MTIyYmM="," +
    7. ""page":"page/component/index"," +
    8. ""data":"{\\"keyword1\\": {\\"value\\" : \\"12:00\\"},\\"keyword2\\": {\\"value\\" : \\"20180808\\"},\\"keyword3\\": {\\"value\\" : \\"支付宝\\"}}"" +
    9. "  }");
    10. AlipayOpenAppMiniTemplatemessageSendResponse response = alipayClient.execute(request);
    11. if(response.isSuccess()){
    12. System.out.println("调用成功");
    13. } else {
    14. System.out.println("调用失败");
    15. }
    复制代码

  • 可以看出,除了支付宝相关配置,最主要的是bizContent的设置,所以这边也是围绕bizContent去做封装

3、工具类封装3.1、MessageData
  • 主要用于封装消息体(关键字)
    1. import com.alibaba.fastjson.JSON;
    2. import com.alibaba.fastjson.JSONObject;
    3. import lombok.Data;
    4. import org.apache.commons.lang3.StringUtils;

    5. /**
    6. * @author cxq
    7. * @version : MessageData.java, v 0.1 2020年03月24日 6:57 下午 cxq Exp $
    8. */
    9. @Data
    10. public class MessageData {
    11.     private Keyword keyword1;
    12.     private Keyword keyword2;
    13.     private Keyword keyword3;
    14.     private Keyword keyword4;
    15.     private Keyword keyword5;
    16.     private Keyword keyword6;
    17.     private Keyword keyword7;
    18.     private Keyword keyword8;
    19.     private Keyword keyword9;
    20.     private Keyword keyword10;

    21.     public void setKeyword1Value(String value) {
    22.         if (StringUtils.isNotBlank(value)) {
    23.             this.keyword1 = new Keyword(value);
    24.         }
    25.     }

    26.     public void setKeyword2Value(String value) {
    27.         if (StringUtils.isNotBlank(value)) {
    28.             this.keyword2 = new Keyword(value);
    29.         }
    30.     }

    31.     public void setKeyword3Value(String value) {
    32.         if (StringUtils.isNotBlank(value)) {
    33.             this.keyword3 = new Keyword(value);
    34.         }
    35.     }

    36.     public void setKeyword4Value(String value) {
    37.         if (StringUtils.isNotBlank(value)) {
    38.             this.keyword4 = new Keyword(value);
    39.         }
    40.     }

    41.     public void setKeyword5Value(String value) {
    42.         if (StringUtils.isNotBlank(value)) {
    43.             this.keyword4 = new Keyword(value);
    44.         }
    45.     }

    46.     public void setKeyword6Value(String value) {
    47.         if (StringUtils.isNotBlank(value)) {
    48.             this.keyword5 = new Keyword(value);
    49.         }
    50.     }

    51.     public void setKeyword7Value(String value) {
    52.         if (StringUtils.isNotBlank(value)) {
    53.             this.keyword7 = new Keyword(value);
    54.         }
    55.     }

    56.     public void setKeyword8Value(String value) {
    57.         if (StringUtils.isNotBlank(value)) {
    58.             this.keyword8 = new Keyword(value);
    59.         }
    60.     }

    61.     public void setKeyword9Value(String value) {
    62.         if (StringUtils.isNotBlank(value)) {
    63.             this.keyword9 = new Keyword(value);
    64.         }
    65.     }

    66.     public void setKeyword10Value(String value) {
    67.         if (StringUtils.isNotBlank(value)) {
    68.             this.keyword10 = new Keyword(value);
    69.         }
    70.     }

    71.     // 格式为{keyword1:xxxx, keyword2:xxxx}
    72.     public MessageData(String jsonStr) {
    73.         JSONObject jsonObject = JSON.parseObject(jsonStr);
    74.         this.setKeyword1Value((String) jsonObject.get("keyword1"));
    75.         this.setKeyword2Value((String) jsonObject.get("keyword2"));
    76.         this.setKeyword3Value((String) jsonObject.get("keyword3"));
    77.         this.setKeyword4Value((String) jsonObject.get("keyword4"));
    78.         this.setKeyword5Value((String) jsonObject.get("keyword5"));
    79.         this.setKeyword6Value((String) jsonObject.get("keyword6"));
    80.         this.setKeyword7Value((String) jsonObject.get("keyword7"));
    81.         this.setKeyword8Value((String) jsonObject.get("keyword8"));
    82.         this.setKeyword9Value((String) jsonObject.get("keyword9"));
    83.         this.setKeyword10Value((String) jsonObject.get("keyword10"));
    84.     }

    85.     public MessageData() {
    86.     }

    87.     @Data
    88.     public static class Keyword {
    89.         public Keyword(String value) {
    90.             this.value = value;
    91.         }

    92.         private String value;
    93.     }

    94. }
    复制代码


3.2、获取订阅消息相关数据
  • 小程序相关信息
    1. @Override
    2.     public AlipayOpenAppMiniTemplatemessageSendResponse appMiniTemplateMsgPush(String clubCode, String alipayUid,
    3.                                                                                String userTemplateId, String page, MessageData data) {

    4.         AlipayConfig alipayConfig = this.getAlipayConfigByClub(clubCode);
    5.         MiniTemplateMessage miniTemplateMessage = new MiniTemplateMessage();
    6.         miniTemplateMessage.setTemplateId(userTemplateId);
    7.         miniTemplateMessage.setUid(alipayUid);
    8.         miniTemplateMessage.setPage(page);
    9.         miniTemplateMessage.setData(data);

    10.         return alipayOpenApiClient.appMiniTemplateMsgPush(miniTemplateMessage, alipayConfig);
    11.     }
    复制代码


3.3、支付宝API工具类
  • 可封装到支付宝工具类中
    1. /**
    2.      * 模板消息推送
    3.      *
    4.      * @param miniTemplateMessage 推送内容
    5.      * @param alipayInfo
    6.      * @return
    7.      */
    8.     public AlipayOpenAppMiniTemplatemessageSendResponse appMiniTemplateMsgPush(MiniTemplateMessage miniTemplateMessage,
    9.                                                                                AlipayConfig alipayInfo) {
    10.         AlipayOpenAppMiniTemplatemessageSendRequest request = new AlipayOpenAppMiniTemplatemessageSendRequest();
    11.         String bizContent = JSON.toJSONString(miniTemplateMessage);
    12.         request.setBizContent(bizContent);
    13.         return executeRequest(request, alipayInfo);
    14.     }


    15.     private <T extends AlipayResponse> T executeRequest(AlipayRequest request, AlipayConfig alipayInfo) throws AlipayOpenApiException {
    16.         return executeRequest(request, null, alipayInfo);
    17.     }

    18.     private <T extends AlipayResponse> T executeRequest(AlipayRequest request,
    19.                                                         String accessToken, AlipayConfig alipayInfo) throws AlipayOpenApiException {
    20.         AlipayClient alipayClient = alipayClientFactory.getAlipayClient(alipayInfo);

    21.         AlipayResponse response;
    22.         try {
    23.             response = null == accessToken ? alipayClient.execute(request) : alipayClient.execute(request, accessToken);
    24.             if (!response.isSuccess()) {
    25.                 throw new AlipayOpenApiException(response, String.format("请求接口(%s),执行失败(%s)",
    26.                         request.getApiMethodName(), response.getMsg()));
    27.             }
    28.             return (T) response;
    29.         } catch (AlipayApiException e) {
    30.             log.error(String.format("请求接口(%s),出现错误!", request.getApiMethodName()), e);
    31.             throw new AlipayOpenApiException(null, String.format("请求接口(%s),出现错误!", request.getApiMethodName()));
    32.         }
    33.     }
    复制代码


3.4、测试
  1. @PostMapping("")
  2.     public Boolean testMsgPush(@RequestBody Parameter parameter) {
  3.         log.info("parameter is {}", parameter);
  4.         // 推送内容:活动名称、中奖号、开奖时间
  5.         MessageData data = new MessageData();
  6.         data.setKeyword1Value(parameter.getKeyword1());
  7.         data.setKeyword2Value(parameter.getKeyword2());
  8.         data.setKeyword3Value(parameter.getKeyword3());
  9.         data.setKeyword4Value(parameter.getKeyword4());

  10.         AlipayOpenAppMiniTemplatemessageSendResponse response
  11.                 = alipayService.appMiniTemplateMsgPush("manchester", parameter.getAlipayUid(),
  12.                 "xxx", "xxx", data);
  13.         log.info("response is {}", response.getSubMsg());

  14.         return true;
  15.     }


  16. @Data
  17. @ToString
  18. class Parameter {
  19.     private String keyword1;
  20.     private String keyword2;
  21.     private String keyword3;
  22.     private String keyword4;
  23.     private String alipayUid;
  24. }
复制代码
3.5、消息截图

支付宝订阅消息推送

支付宝订阅消息推送



支付宝订阅消息推送

支付宝订阅消息推送



相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员6折;永久VIP4折
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|小黑屋|依星资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2025-4-17 06:48

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表