小程序对接三方插件契约锁

发布时间 2023-04-06 14:12:34作者: 我有头盔

1.申请插件

在开始开发前,需要先申请契约锁小程序插件的使用权限,开发者需要登录自身小程序管理后台,在”设置-第三方服务-插件管理“中添加小程序插件,通过如下

appId:wxaf8f505686ddf66a

匹配到插件后添加即可提交申请。

 

2.引入插件,也可在分包目录下引入,在主包内引入可能会超两兆,version,版本号,注意要使用最新的,否则有些新功能无法使用。

{
  ...
  "plugins": {
    "qyssdk-plugin": {
      "version": "1.0.30",
      "provider": "wxaf8f505686ddf66a"
    }
  }
  ...
}

 

3.插件调用

契约锁小程序插件以插件页面的形式为对接方小程序提供服务,可通过如下方式进入插件页面,用户在插件页面完成对应操作后,会自动跳回到跳转前的小程序页面,也支持指定跳转页面。

以下为一次签署成功方案 ,如果是认证后,重新签署需要自己和后端判断下          

          // page 插件页面入口:doc(合同签署入口),enterprise-auth(企业认证入口),personal-auth(实名认证入口)
                // env 环境参数:com(生产环境),cn(测试环境),默认为生产环境
                // ticket 由开放平台接口获取的插件页面令牌,请注意获取的令牌需与插件页面入口对应使用
                
                let page = 'doc';
                let page2 = 'doc';
                let env = 'cn';
                let ticket = '';
                let ticket2 = '';
                
                // 调用接口 拿到认证令牌
                this.$api
                    .post(global.apiUrls.post6413da25043e6, {
                        order_sn:this.model.order_sn
                    }).then(res => {
                        res = res.data;
                        ticket = res.data.href;
                        let eventChannel = null;
                        // 跳转签署页面
                        uni.navigateTo({
                            url: `plugin://qyssdk-plugin/doc?ticket=${ticket}&env=${env}&hasCb=true`,
                            events: {
                                signSuccessCb: () => { // 签署成功回调
                                    const url = ''; // 需要跳转的小程序页面地址,必须是绝对路径,可不传
                                    eventChannel.emit('jumpTo'); // 触发跳转逻辑,回调存在时必需调用,url不传默认返回
                                },
                                authSuccessCb: (e) => {
                                    console.log(e, '实名认证成功');
                                    // 实名认证成功 重新再获取签署令牌
                                    this.$api
                                        .post(global.apiUrls.post6413da25043e6, {
                                            order_sn:this.model.order_sn
                                        }).then(restow => {
                                            restow = restow.data;
                                            ticket2 = restow.data.href;
                                            // 跳转签约页面 签约完会自己返回
                                            eventChannel.emit('jumpTo',
                                                `plugin://qyssdk-plugin/${page2}?ticket=${ticket2}&env=${env}&hasCb=true`, {
                                                    signSuccessCb: (openedEventChannel) => {
                                                        openedEventChannel.emit('jumpTo');
                                                    },
                                                    authSuccessCb: (openedEventChannel) => {
                                                        openedEventChannel.emit('jumpTo',
                                                            '/tabbar/mine/mine');
                                                    },
                                                    authFailCb: (openedEventChannel) => {
                                                        openedEventChannel.emit('jumpTo',
                                                            '/subpackages/mine/settings');
                                                    },
                                                });
                                        })
                                },
                                authFailCb() { // 认证失败回调
                                    console.log('authFail');
                                    const url =
                                    '/pages/order/orderdetail/order-detail/index'; // 需要跳转的小程序页面地址,必须是绝对路径,可不传
                                    eventChannel.emit('jumpTo');
                                },
                            },
                            success(res) {
                                console.log(res)
                                eventChannel = res.eventChannel;
                            },
                        });
                    })