# wechat-third-demo **Repository Path**: javacodekit2010/wechat-third-demo ## Basic Information - **Project Name**: wechat-third-demo - **Description**: 微信第三方平台授权、代小程序实现业务 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 15 - **Created**: 2019-06-19 - **Last Updated**: 2021-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # wechat-third-demo #### 介绍 微信第三方平台授权、代小程序实现业务 **创建微信第三方平台**:https://open.weixin.qq.com/cgi-bin/applist?t=manage/list&page=0&num=20&openapptype=2048&token=f784ba603ff7672055fea60185ed6f2650b3f08d&lang=zh_CN **微信第三方平台概述**:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318292&token=&lang= **关于微信第三方平台开发的完整流程笔记**:https://www.04007.cn/article/501.html **Jeecg开源社区**:https://gitee.com/jeecg/jeewx **微信开放平台之公众号第三方平台开发及全网发布验证**:https://blog.csdn.net/zhangdaiscott/article/details/48046879 **微信公众账号第三方平台全网发布源码(java)**:https://blog.csdn.net/zhangdaiscott/article/details/48269837 **java微信第三方平台开发**:https://blog.csdn.net/wei389083222/article/details/53174612 **微信第三方平台授权小程序业务**:http://www.php.cn/weixin-kaifa-406993.html **全能微信Java开发工具包,支持包括微信支付、开放平台、小程序、企业微信/企业号和公众号等的后端开发**:https://github.com/Wechat-Group/weixin-java-tools/tree/6c4dba8254d1b77fb9aa59d80d3d158ea5b489b6 **微信第三方平台开发功能demo**:https://github.com/Wechat-Group/weixin-java-open-demo #### 软件架构 本Demo基于JDK1.8 + Spring Boot1.5.6 + SpringDataRedis(RedisTemplate) + Maven(构建) 框架技术,实现微信第三方平台开发功能。 #### 流程 1. 创建第三方平台(开发完成1. 后申请全网发布) 1. 第三方平台申请后,微信会每隔10分钟请求平台设置中的授权事件URL。第三方平台需要在此URL里通过componentAppId,componentSecret,componentToken,componentAesKey以及微信get和post过来的数据解密出ComponentVerifyTicket这个数据并保存,这个ComponentVerifyTicket是一个以1. ticket@@@开头的长字符串。 1. 用component_appid,component_appsecret,和上面每10分钟更新缓存的ComponentVerifyTicket数据调用微信接口拿到第三方请求微信的componentAccessToken(2小时后失效,记得缓存)凭证,后面所有涉及调用第三方的相关东西都是使用这个凭证。 1. 用component_appid、componentAccessToken拿到pre_auth_code值,生成一个链接并通过链接点击跳转至下面的URL,https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid={appid]}&pre_auth_code={$pre_auth_code}&redirect_uri={$uri}&auth_type=3见文章:http://www.04007.cn/article/500.html, 上面的页面即会显示微信生成的二维码,用户扫码后会跳转至URL中所传的redirect_uri回调地址,并发送auth_code。 1.在上面的回调接口程序中,通过第三方的appid和回调中返回的auth_code调用微信接口api_query_auth拿到公众号或小程序的authorizer_access_token等数据。authorizer_access_token这个数据就是调用微信拿已授权小程序或者公众号的数据时所要传递的token. 1.在上面的第五步拿到操作小程序或公众号的token之后,需要使用这个token调用微信接口modify_domain更换小程序的服务器域名,以便代替微信对小程序或公众号进行运营管理。 1. 调用微信接口bind_tester添加某个微信号为小程序的体验者 1. 在微信第三方平台设置页面里上传一个开发小程序的代码的,并添加为模板,取得模板ID 1. 在第三方平台开发程序中调用微信接口/wxa/commit传入参数:ext_json ``` array( 'extAppid' => 小程序的ID, 'ext' => array( #扩展字段 ), 'window' => array( "navigationBarTitleText" => "小程序名称", ), ); ``` 1. 利用第三方平台上设置的小程序模板,任务用户授权给我们开发的第三方平台后,复制我们的小程序模板给此小程序生成一套代码,这样每个小程序因为扩展参数不一样,其调用服务端的参数不一样,拿到的就是不同的数据,因而前端展现就不一样,从而实现了在线生成小程序功能。 1. 生成体验版URL,带上goken调用微信接口即可生成小程序体验者扫描的二维码。 #### wxminiprograms数据表,保存已授权小程序的基本信息及授权相关信息(authorizer_access_token/authorizer_refresh_token)这两个值很重要,代小程序实现业务基本上是通过这两个值来实现(具体可参考介绍里的微信第三方平台授权小程序业务) ``` DROP TABLE IF EXISTS `wxminiprograms`; CREATE TABLE `wxminiprograms` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `uid` int(10) unsigned NOT NULL COMMENT '用户ID', `nick_name` varchar(45) DEFAULT NULL COMMENT '微信小程序名称', `alias` varchar(45) DEFAULT NULL COMMENT '别名', `token` varchar(45) DEFAULT NULL COMMENT '平台生成的token值', `head_img` varchar(255) DEFAULT NULL COMMENT '微信小程序头像', `verify_type_info` tinyint(1) DEFAULT NULL COMMENT '授权方认证类型,-1代表未认证,0代表微信认证', `is_show` tinyint(1) DEFAULT '0' COMMENT '是否显示,0显示,1隐藏', `user_name` varchar(45) DEFAULT NULL COMMENT '原始ID', `qrcode_url` varchar(255) DEFAULT NULL COMMENT '二维码图片的URL', `business_info` varchar(255) DEFAULT NULL COMMENT 'json格式。用以了解以下功能的开通状况(0代表未开通,1代表已开通): open_store:是否开通微信门店功能 open_scan:是否开通微信扫商品功能 open_pay:是否开通微信支付功能 open_card:是否开通微信卡券功能 open_shake:是否开通微信摇一摇功能', `idc` int(10) unsigned DEFAULT NULL COMMENT 'idc', `principal_name` varchar(45) DEFAULT NULL COMMENT '小程序的主体名称', `signature` varchar(255) DEFAULT NULL COMMENT '帐号介绍', `miniprograminfo` varchar(255) DEFAULT NULL COMMENT 'json格式。判断是否为小程序类型授权,包含network小程序已设置的各个服务器域名', `func_info` longtext COMMENT 'json格式。权限集列表,ID为17到19时分别代表: 17.帐号管理权限 18.开发管理权限 19.客服消息管理权限 请注意: 1)该字段的返回不会考虑小程序是否具备该权限集的权限(因为可能部分具备)。', `authorizer_appid` varchar(45) DEFAULT NULL COMMENT '小程序appid', `authorizer_access_token` varchar(255) DEFAULT NULL COMMENT '授权方接口调用凭据(在授权的公众号或小程序具备API权限时,才有此返回值),也简称为令牌', `authorizer_expires` int(10) unsigned DEFAULT NULL COMMENT 'refresh有效期', `authorizer_refresh_token` varchar(255) DEFAULT NULL COMMENT '接口调用凭据刷新令牌', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '授权时间', `auditid` varchar(45) NOT NULL COMMENT '审核编号', `status` tinyint(1) unsigned NOT NULL DEFAULT '3' COMMENT '审核状态,其中0为审核成功,1为审核失败,2为审核中,3已提交审核', `audit_time` DATETIME DEFAULT NULL COMMENT '审核时间', `reason` varchar(255) DEFAULT NULL COMMENT '当status=1,审核被拒绝时,返回的拒绝原因', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='微信小程序授权列表'; ``` #### 使用说明 1. 创建第三方平台(介绍有地址),授权测试公众号列表、小程序服务器域名、白名单IP地址列表需要填写自己的 1. 在微信第三方平台配置微信第三方平台中的授权事件接收URL:http://域名/wechat/third/notify/receive_ticket 1. 在微信第三方平台配置微信第三方平台中的公众号消息与事件接收URL http://域名/wechat/third/notify/$APPID$/callback 1. 配置:修改/src/main/resources/application.yml ,根据自己需要填写相关配置(需要注意的是:yml文件内的属性冒号后面的文字之前需要加空格,可参考已有配置,否则属性会设置不成功); 1. 运行Java程序:WechatThirdDemoApplication; 1. 首次启动后需要 等待收到 微信推送的 component_verify_ticket 后才可以使用接口 (在第三方平台创建审核通过后,微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket,用于获取第三方平台接口调用凭据) 1. 浏览器访问:http://域名/wechat/third/auth/goto_auth_url_show 点击 一键授权 跳转到微信授权页面 扫码授权 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)