Loading... #### 一、企业微信代开发应用的基本流程 企业微信中除了系统提供的应用以及上架应用商店的第三方应用外,也可以使用自己开发的应用,不过多数企业都不具备开发能力,只能采用代开发的形式进行定制。就给大家分享一下企业微信代开发应用的基本流程,为大家定制应用提供参考。  ##### 1.1什么是代开发应用 如我方是科技服务公司A,有一家公司B,B提出想在自己的企业微信工作台上,上线一个xxx功能,但是B公司没有自己的研发人员去实现完成,且也没有服务器去支撑。所以找到了A。A通过自己家的企业微信,创建一个模板,让B的管理员扫码授权后,A的研发人员可以在模板下开发应用,提交上线到B的企业微信中。这就是代开发应用。 微信官方的解释:当前第三方服务商为企业代开发自建应用时,需要线下获取企业的各类密钥数据,流程复杂、管理成本高且权限获取有安全合规风险。为了帮助服务商更加高效地、安全地为企业提供应用代开发服务,企业微信新增自建应用代开发模式,即:企业可通过扫码授权的方式,授权第三方服务商代开发自建应用。 官方文档:https://developer.work.weixin.qq.com/document/path/97112 ##### 1.2代开发流程 申请服务商代开发  企业微信->工作台->企业微信服务助手   登录企业微信管理后台     #### 二、开发过程 ##### 2.1 前期准备工作 * 我使用的是PHP7.4,直接 composer easywechat4.0的版本,官网地:[easywechat.com](https://easywechat.com/) ```php composer require overtrue/wechat:~4.0 -vvv ``` * 或者你也可以直接使用官网的加密解密JDK,我使用的是php,直接下载后放在extend文件夹下面,如果没有就新建一个,下载地址:[https://developer.work.weixin.qq.com/devtool/introduce?id=36388](https://developer.work.weixin.qq.com/devtool/introduce?id=36388)  ##### 2.2 创建代开发模板 * 首先需要开发公司创建代开发应用模板,填写代开发模板的名称、介绍、Logo、分类行业等信息,填写该代开发模板的回调 URL、Token、加密key等信息并提交申请。    * 代开发模版回调url代码,※号部分改成自己的企业 ```php <?php namespace app\wechat\controller; use EasyWeChat\Factory; use think\facade\Db; use think\facade\Request; require_once root_path() .'extend/weworkapi/callback/WXBizMsgCrypt.php'; // 引入加解密类 //代开发模板回调URL class Weworkr { private $config = [ 'corp_id' => 'wx55****6e2c', //服务商的id 'secret' => 'SAjiYfunx***********0YC23Kzos3voC1EM',//模板Secret 'token' => 'D4nRd****Cg4rM194V', //模版Token 'aes_key' => 'bAPm******xBszuAiIzExDSn6N3Nv1A8US', //模版EncodingAESKey 'log' => [ 'level' => 'debug', 'file' => '/www/wwwroot/wh.******.com/public/easywechat.log', ], ]; /** * 代开发模板回调URL */ public function index() { //代开发模板回调URL $app = Factory::openWork($this->config); $server = $app->server; $server->push(function ($message) use($app) { switch ($message['InfoType']) { //推送suite_ticket case 'suite_ticket': Db::name('company_information') ->where('suite_id',$message['SuiteId']) ->update(['suite_ticket'=>$message['SuiteTicket']]); return 'success'; break; //授权成功通知 case 'create_auth': $data['auth_code']=$message['AuthCode']; $data['suite_id']=$message['SuiteId']; $data['create_time']=time(); Db::name('company_information')->insert($data); return 'success'; break; //变更授权通知 case 'cancel_auth': return 'cancel_auth'; break; //通讯录事件通知 case 'change_contact': switch ($message['ChangeType']){ case 'create_user': return '新增成员事件'; break; case 'update_user': return '更新成员事件'; break; case 'delete_user': return '删除成员事件'; break; case 'create_party': return '新增部门事件'; break; case 'update_party': return '更新部门事件'; break; case 'delete_party': return '删除部门事件'; break; case 'update_tag': return '标签成员变更事件'; break; } break; default: return 'fail'; break; } }); $response = $server->serve(); $response->send(); } } ``` * 完成模板创建后,点击模板查看会看见一个二维码,发给客户企业微信的管理员进行扫码授权,企业管理员扫代开发模版授权码时,授权完成后会推送[授权成功通知](https://developer.work.weixin.qq.com/document/path/97163#14951)到应用代开发模版回调url,收到回调后,开发者通过本接口获取到临时授权码,把临时授权码存到数据表,下次要用。 * 这一步就是授权成功后的地方,存入数据表  * 查看模板信息,点击刷新按钮,会发送一个suite_ticket,我们把这个存入到数据表    * 获取永久授权码,需要用到临时授权码和suite_ticket,临时授权码只能用一次,如果没有成功只能在代开发的企业后台取消授权,在服务商这边从新扫码绑定,重新获取一次临时授权码 ```php //获取永久授权码 public function getPermanentByCode(){ $find=Db::name('company_information') ->field('permanent_code,auth_code,suite_ticket') ->where('suite_id','dkd****7b1bf79cc') ->find(); //获取代开发应用模板凭证 $url="https://qyapi.weixin.qq.com/cgi-bin/service/get_suite_token"; $data=[ "suite_id" =>'dkdb***7b1bf79cc', "suite_secret" =>'SAjiYfu****nwN0lLxyO2x0YC23Kzos3voC1EM', "suite_ticket" =>$find['suite_ticket'], ]; $suite_access_token=curl_get1($url,$data)['suite_access_token']; //获取永久授权码 $url1="https://qyapi.weixin.qq.com/cgi-bin/service/get_permanent_code?suite_access_token={$suite_access_token}"; $data1=[ "auth_code" =>$find['auth_code'], ]; $PermanentByCode=curl_get1($url1,$data1); $company_information['corpid']=$PermanentByCode['auth_corp_info']['corpid']; $company_information['permanent_code']=$PermanentByCode['permanent_code']; $company_information['auth_user_info']=json_encode($PermanentByCode['auth_user_info']); $company_information['auth_info']=json_encode($PermanentByCode['auth_info']); $company_information['auth_corp_info']=json_encode($PermanentByCode['auth_corp_info']); Db::name('company_information') ->where('suite_id','dkdbc4c947b1bf79cc') ->update($company_information); } ``` 最后修改:2024 年 11 月 22 日 © 允许规范转载 打赏 赞赏作者 赞 如果觉得我的文章对你有用,请随意赞赏