• 支付宝开放平台第三方代小程序开发,消息服务推送通知总结


    大家好,我是小悟

    关于支付宝开放平台第三方代小程序开发的消息服务推送通知,是开放平台代小程序实现业务的重要功能。

    消息服务推送通知,支持商家两种通讯协议来接收消息,分别为websocket 长连接和http。

    关于websocket方式,在之前的文章已分享过,可参考 WebSocket长连接接入支付宝消息服务,实现消息通知

    创建好第三方应用后,在产品绑定-绑定产品,添加【小程序开发管理】权限集。

    在这里插入图片描述

    只有添加了对应的权限集,消息服务控制台才会显示对应的消息名称用来订阅。与 http 相比,websocket 方式接入性能更优,通道安全,减少成本,接入快速等优势。但两种方式都可以实现,怎么方便怎么来。
    图片

    支付宝模板小程序开发这边主要用到了第三方应用授权取消通知、商户确认服务商代创建小程序结果通知、商户确认服务商代创建试用小程序结果通知、小程序审核通过通知、小程序审核驳回通知、小程序审核不可营销通知。

    值得注意的是,服务商向商家发送授权链接(或授权二维码)的授权方式不会触发授权通知,商家订购模板服务时授权、服务商协助商家创建小程序时授权或商家签约即授权等场景,会触发授权通知。

    消息服务推送通知

    第三方应用授权取消通知,商户取消对服务商应用的授权时会触发此消息,服务商可以针对此消息做业务处理。websocket和http方式下分别是msgApi和msg_method对应取值为alipay.open.auth.appauth.cancelled。

    ISV_GATEWAY_URL?charset=UTF-8&biz_content=
    {
    "app_auth_token":"211203BB6e8df9252c9e179d9f4c94d57d510X00",
    "app_id":"2014072300007148",
    "auth_app_id":"2013072300101234",
    "user_id":"2088100000034011"
    }
    &msg_method=alipay.open.auth.appauth.cancelled&utc_timestamp=1516797622752&version=1.1&sign_type=RSA2&notify_id=d275fec564e62af6bedbcee73f3f05fi5x&app_id=2013121700999429&sign=I+Y/lvqYUEEc10EPdpntRhFIQ==
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    商户确认服务商代创建小程序结果通知,商户确认服务商代创建小程序申请后,通知服务商商户确认结果。websocket和http方式下分别是msgApi和msg_method对应取值为alipay.open.mini.merchant.confirmed。

    ISV_GATEWAY_URL?charset=UTF-8&biz_content=
    {
    "order_no":"2394834823942343",
    "out_order_no":"23948392483253534535",
    "min_app_id":"20218324729872",
    "status":"PROCESS",
    "pid":"2088002306330746"
    }
    &msg_method=alipay.open.mini.merchant.confirmed&utc_timestamp=1516797622752&version=1.1&sign_type=RSA2&notify_id=d275fec564e62af6bedbcee73f3f05fi5x&app_id=2013121700999429&sign=I+Y/lvqYUEEc10EPdpntRhFIQ==
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    商户确认服务商代创建试用小程序结果通知,商户确认服务商代创建试用小程序申请后,通知服务商商户确认结果。websocket和http方式下分别是msgApi和msg_method对应取值为alipay.open.mini.merchant.fastregister.changed。

    ISV_GATEWAY_URL?charset=UTF-8&biz_content=
    {
    "order_no":"2394834823942343",
    "out_order_no":"23948392483253534535",
    "merchant_app_id":"20218324729872",
    "status":"CREATE_MINI_APP_SUCCESS",
    "app_name":"张三的试用小程序",
    "merchant_id":"208121234234324234234324"
    }
    &msg_method=alipay.open.mini.merchant.fastregister.changed&utc_timestamp=1516797622752&version=1.1&sign_type=RSA2&notify_id=d275fec564e62af6bedbcee73f3f05fi5x&app_id=2013121700999429&sign=I+Y/lvqYUEEc10EPdpntRhFIQ==
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    小程序审核通过通知,websocket和http方式下分别是msgApi和msg_method对应取值为alipay.open.mini.version.audit.passed。

    ISV_GATEWAY_URL?charset=UTF-8&biz_content=
    {
    "mini_app_id":"2014072300007148"
    }
    &msg_method=alipay.open.mini.version.audit.passed&utc_timestamp=1516797622752&version=1.1&sign_type=RSA2&notify_id=d275fec564e62af6bedbcee73f3f05fi5x&app_id=2013121700999429&sign=I+Y/lvqYUEEc10EPdpntRhFIQ==
    
    • 1
    • 2
    • 3
    • 4
    • 5

    小程序审核驳回通知,websocket和http方式下分别是msgApi和msg_method对应取值为alipay.open.mini.version.audit.rejected。

    ISV_GATEWAY_URL?charset=UTF-8&biz_content=
    {
    "mini_app_id":"2014072300007148",
    "bundle_id":"com.alipay.alipaywallet",
    "mini_app_version":"0.0.1",
    "audit_reason":"JS错误检测:发现JS错误,请及时优化",
    "base_audit":"REJECT",
    "promote_audit":"REJECT",
    "base_audit_reason":{
            "audit_images":[
              "xxx.png"
            ],
            "memos":[{
              "memo":"JS错误检测:发现JS错误,请及时优化",
                "memo_image_list":[
                  "xxx.png"
                ]
              }]
        },
    "promote_audit_reason":{
            "audit_images":[
              "xxx.png"
            ],
            "memos":[{
              "memo":"JS错误检测:发现JS错误,请及时优化",
                "memo_image_list":[
                  "xxx.png"
                ]
              }]
        }
    }
    &msg_method=alipay.open.mini.version.audit.rejected&utc_timestamp=1516797622752&version=1.1&sign_type=RSA2&notify_id=d275fec564e62af6bedbcee73f3f05fi5x&app_id=2013121700999429&sign=I+Y/lvqYUEEc10EPdpntRhFIQ==
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    小程序审核不可营销通知,websocket和http方式下分别是msgApi和msg_method对应取值为alipay.open.mini.version.baseaudit.passed。

    ISV_GATEWAY_URL?charset=UTF-8&biz_content=
    {
    "mini_app_id":"2014072300007148",
    "bundle_id":"com.alipay.alipaywallet",
    "mini_app_version":"0.0.1",
    "audit_reason":"JS错误检测:发现JS错误,请及时优化",
    "base_audit":"PASS",
    "promote_audit":"REJECT",
    "base_audit_reason":{
            "audit_images":[
              "xxx.png"
            ],
            "memos":[{
              "memo":"JS错误检测:发现JS错误,请及时优化",
                "memo_image_list":[
                  "xxx.png"
                ]
              }]
        },
    "promote_audit_reason":{
            "audit_images":[
              "xxx.png"
            ],
            "memos":[{
              "memo":"JS错误检测:发现JS错误,请及时优化",
                "memo_image_list":[
                  "xxx.png"
                ]
              }]
        }
    }
    &msg_method=alipay.open.mini.version.baseaudit.passed&utc_timestamp=1516797622752&version=1.1&sign_type=RSA2&notify_id=d275fec564e62af6bedbcee73f3f05fi5x&app_id=2013121700999429&sign=I+Y/lvqYUEEc10EPdpntRhFIQ==
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    收到异步通知后,商家输出success表示消息获取成功,支付宝就会停止发送异步,如果输出fail,表示消息获取失败,支付宝会重新发送消息到异步地址。

    @PostMapping(value = "/notify/callback")
    public String notifyCallBack(HttpServletRequest request) {
        Map<String, String> result = new HashMap<String, String>();
        Map requestParams = request.getParameterMap();
        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
            String name = (String) iter.next();
            String[] values = (String[]) requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i]
                        : valueStr + values[i] + ",";
            }
            result.put(name, valueStr);
        }
        String resultStr = JSON.toJSONString(result);
        logger.info("支付宝通知回调参数==========={}", resultStr);
        try {
            boolean flag = AlipaySignature.rsaCertCheckV1(result, alipayPublicCertPath, "utf-8", "RSA2");
            if (flag) {
                logger.info("支付宝通知回调参数success===========");
                String msgMethod = result.get("msg_method");
                if (StringUtils.equals("alipay.open.auth.appauth.cancelled", msgMethod)) {
                    logger.info("第三方应用授权取消消息");
                } else if (StringUtils.equals("alipay.open.mini.merchant.confirmed", msgMethod)) {
                    logger.info("商户确认服务商代创建小程序结果通知");
                } else if (StringUtils.equals("alipay.open.mini.merchant.fastregister.changed", msgMethod)) {
                    logger.info("商户确认服务商代创建试用小程序结果通知");
                } else if (StringUtils.equals("alipay.open.mini.version.audit.passed", msgMethod)) {
                    logger.info("小程序审核通过通知");
                } else if (StringUtils.equals("alipay.open.mini.version.audit.rejected", msgMethod)) {
                    logger.info("小程序审核驳回通知");
                } else if (StringUtils.equals("alipay.open.mini.version.baseaudit.passed", msgMethod)) {
                    logger.info("小程序审核不可营销通知");
                }
                return "success";
            } else {
                logger.info("支付宝通知回调参数failure===========");
                return "fail";
            }
        } catch (AlipayApiException e) {
            e.printStackTrace();
            logger.info("支付宝通知回调参数failure===========");
            return "fail";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    您的一键三连,是我更新的最大动力,谢谢

    山水有相逢,来日皆可期,谢谢阅读,我们再会

    我手中的金箍棒,上能通天,下能探海

  • 相关阅读:
    lvs负载均衡、LVS集群部署
    【干货】RPA+AI入门必须知道的39个名词
    浙大中控ECS700学习笔记一硬件
    14:00面试,14:06就出来了,问的问题有点变态。。。
    github常用搜索指令
    国内唯一|阿里云入选 Gartner 应用性能监控与可观测魔力象限
    精准配置无线接入点发射功率
    使用Keepalived实现双机热备,实现服务高可用
    linux之/etc/skel目录
    向量检索(二)Faiss 不同索引的性能
  • 原文地址:https://blog.csdn.net/LiuAustin/article/details/133808109