微信公众号对接星瀚消息平台,代码调用消息平台发送通知原创
金蝶云社区-夏洛不烦恼
夏洛不烦恼
1人赞赏了该文章 134次浏览 未经作者许可,禁止转载编辑于2024年04月09日 10:37:15

1、注册微信公众号测试号

http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

注意:

a、测试微信公众号的模版消息是可以手动编辑字段的,但是正式的微信公众号(已认证的服务号专有)只能从现有模版消息库中选择。

b、测试微信公众号的接口权限和正常的微信公众号是不完全相同的,请注意是否满足客户需求。

c、测试微信公众号不需要设置ip白名单即可获取token,正式的微信公众号需要设置ip白名单才可以获取微信的token,设置菜单为:设置与开发-安全中心-IP白名单

d、设置JS安全域名(测试公众号,需要有自己的服务器),正式微信公众号需要设置JS安全域名和网页安全域名(还需要按照微信的要求到服务器中对应的文件才可用)           将文件MP_verify_WAeKCUAHPRExbXad.txt(点击下载)上传至填写域名或路径指向的web服务器(或虚拟主机)的目录(若填写域名,将文件放置在域名根目录下,例如wx.qq.com/MP_verify_WAeKCUAHPRExbXad.txt;若填写路径,将文件放置在路径目录下,例如wx.qq.com/mp/MP_verify_WAeKCUAHPRExbXad.txt),并确保可以访问

附:获取token的地址  https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=?&secret=?

2、调用接口创建测试微信公众号菜单(正式的微信公众号不需要此操作,直接在 内容与互动-自定义菜单中设置即可)

自定义菜单 / 创建接口 (qq.com),根据文档设置即可

image.png

a、配置自定义跳转URL:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=?&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

其中STATE应替换为wxgzh_split_appID_split_appsecret这种格式的值,例如:
wxgzh_split_wxa20e1232154586e4_split_89488d1231545165654f8b8c72fc0d
REDIRECT_URI为把需要跳转的URL进行urlencode编码后的字符串,可以百度urlencode在线编码工具进行编码。
苍穹移动端的url格式大致为:http://访问域名/ierp/mobile.html?form=mobsp_apphomepage_new(注意这里微信规定不能用ip+端口的方式,注意这里不能用类似pc端首页的地址,不能在后面加#/dform?form=单据编码)

注意: 访问域名需要在JS安全域名和网页安全域名中设置,否则访问网络不通

3、苍穹mc中配置单点登录(免登)

a、进入mc中的环境公共配置项 :编码:authtication.apps 值kd.bos.login.thirdauth.app.tencent.WxgzhAuthtication

image.png

b、同步用户信息到苍穹(绑定关联关系,需要能访问外网否者获取不到微信的openID)

编码:login.after.handle.classes 值:kd.bos.login.thirdauth.app.tencent.WxgzhLoginAfter

image.png

这里可以使用企业微信同步用户,也可以直接在系统库中t_bas_immapping表插入数据,需要苍穹中用户的主键和微信中用户的openId,可以在苍穹的系统库使用sql

insert into t_bas_immapping (fid, FIMTYPEID, FOPENID) value (主键, 类型(暂时随便给值也可以), '微信公众号用户的openId');

update t_bas_immapping SET FUSERID = (select fid from t_sec_user where fphone = '用户手机号') where fid = '用户手机号';

如果没有同步用户,即t_bas_immapping表中查不到数据,则会跳转到苍穹登陆界面;用户输入信息之后苍穹会自动在t_bas_immapping中获取openid并存储;  ( 此逻辑在kd.bos.login.thirdauth.app.tencent.WxgzhLoginAfter中,目前标准代码存在bug,多系统对接对于同一个fuserid会替换openid,导致单点登录到别的系统失败,多系统对接需要修改总部标准代码或者联系总部出私包解决 

4、注册消息渠道

image.png

5、重写渠道解析类,继承kd.bos.workflow.engine.msg.handler.AbstractMessageServiceHandler。

因为这边只需要实现发送消息,createtodo,dealtodo,deletetodo等方法可以不用重写,只需要重写sendMessage方法即可;如果是消息待办需要重写createtodo方法


{
    = .(.);
    (, ) {
    }
    (, ) {
    }
    (, ) {
    }
    (, ) {
        .sendMessage(, );
        {
            = .getTag();
            = .getContent();
            <> = .getUserIds();
            = QFilter(, ., );
            = .(, ,.toArray());
            = .get().toString();
            .info(+);
            = .get().toString();
            .info(+);
            = .get().toString();
            .info(+);
            = .get().toString();
            .info(+);
            = ++++;
            .info(+);
            = .get().toString();
            .info(+);
            = ;
            = .get().toString();
            .info(+);
            = .get().toString();
            .info(+);
            = .getLong();
            .info(+);
            = .getString();
            = .getString();
            = .getString();
            = .getString();
            = .getString(); = .getString();
            = SimpleDateFormat();
            (!.() && !.()){
                =  .stringToDate(,);
                (.getDayDiff(Date(),)>){
                    = ;
                }
            }
            (.()){
                = .();
                .info(+);
                (!.()){
                    = .();
                    = .getString();
                    = .getIntValue();

                    (.()){
                        = .getString();
                        .error(+);
                        KDBizException();
                    }{
                        =  .(,);
                        .set(,);
                        .set(, .format(addMiniute(Date(),/)).toString());
                        .(DynamicObject[]{});
                    }
                }{
                    .error();
                    KDBizException();
                }
            }
            (!.()){
                = .get().toString();
                .info(+);
                = + ;
                = JSONObject();
                .put(,);
                <> = ArrayList<>();

                (){
                    :
                        = .();
                        = .getString();
                        = .getString();
                        = .getString();
                        = JSONObject();
                        = JSONObject();
                        = JSONObject();
                        = JSONObject();
                        = JSONObject();
                        .put(,);
                        .put(,);
                        .put(,);
                        .put(,); .put(,);
                        .put(,);
                        .put(,);
                        .put(,);
                        = StringBuilder();
= ;
                        (!.()){
                            .append();
                            .append();
                            .append();
                            .append();
                            .append(.());
                            .append();
                            .append();
                            .append();
                            .append();
                            .append();
                        }
                        .put(,);
                        .put(,);
                        (:) {
                            = getUserOpenId();
                            (!.()){
.put(,);
                                .info(+.toJSONString());
                                = .(, , .toJSONString());
                                .info(+);
                                (.()){
                                    .add();
                                }{
                                    = .();
                                    = .getInteger();
                                    (!=){
                                        .add();
                                    }
                                }
                            }
                        }
                        (.size()>){
                            .setUserIds();
                            KDBizException();
                        }
                        ;
            }{
                .error();
                KDBizException();
            }
        }
        () {
        .info(+ .getMessage());
        WFMessageServiceException(, .(), Object[]{.getMessage()});
        }
    }
    () {
        = ;
        = QFilter(, .,);
        = .and(QFilter(, .,));
        = .(, , QFilter[]{});
        (.size()>){
            = .get().getString();
        }
        ;
    }
    (, ) {
        = .();
        .setTime();
        .add(., );
        .getTime();
    }
    (, ) {
        = SimpleDateFormat();
        = ;
        = ;
        {
            = .parse(.format()).getTime();
            = .parse(.format()).getTime();
        } () {
            .error(, );
        }
        ()((- ) / );}
    (, ) {
        = SimpleDateFormat();
        {
            = .parse();
            ;
        } () {
            = StringBuilder();
            .append(.(, , , Object[])).append().append(.(, , , Object[])).append();
            RuntimeException(.toString(), );
        }
    }
}



赞 1