示例框架-Yii2.0+mysql+crm+crm管理系统

1:首先需要下载钉钉官方的提供的php加密Demo

2:相信在做注册审批回调的博友们已经将接入了钉钉sdk,我就不一一展示1了接入流程了—直接上发起代码示例(aeskey必须是43为切记)

3:官方开放平台提供的PHP Demo:pkcs7Encoder.php文件修改

function Prpcrypt($k){$this->key = base64_decode($k . "=");}修改为构造函数形式:function __construct($k){$this->key = base64_decode($k . "=");}12345678

4:官方开放平台提供的PHP Demo:DingtalkCrypt.php文件修改

//加密public function encrypt($text, $corpid){try {//获得16位随机字符串,填充到明文之前$random = $this->getRandomStr();$text = $random . pack("N", strlen($text)) . $text . $corpid;// 网络字节序// $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);// $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');$iv = substr($this->key, 0, 16);//使用自定义的填充方式对明文进行补位填充$pkc_encoder = new PKCS7Encoder;$text = $pkc_encoder->encode($text);// mcrypt_generic_init($module, $this->key, $iv);// //加密// $encrypted = mcrypt_generic($module, $text);// mcrypt_generic_deinit($module);// mcrypt_module_close($module);//print(base64_encode($encrypted));//使用BASE64对加密后的字符串进行编码$encrypted = openssl_encrypt($text, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv );return array(ErrorCode::$OK, base64_encode($encrypted));} catch (Exception $e) {print $e;return array(ErrorCode::$EncryptAESError, null);}}//解密public function decrypt($encrypted, $corpid){try {$ciphertext_dec = base64_decode($encrypted);// $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');$iv = substr($this->key, 0, 16);// mcrypt_generic_init($module, $this->key, $iv);// $decrypted = mdecrypt_generic($module, $ciphertext_dec);// mcrypt_generic_deinit($module);// mcrypt_module_close($module);$decrypted = openssl_decrypt($ciphertext_dec, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);} catch (Exception $e) {return array(ErrorCode::$DecryptAESError, null);}try {//去除补位字符$pkc_encoder = new PKCS7Encoder;$result = $pkc_encoder->decode($decrypted);//去除16位随机字符串,网络字节序和AppIdif (strlen($result) < 16)return "";$content = substr($result, 16, strlen($result));$len_list = unpack("N", substr($content, 0, 4));$xml_len = $len_list[1];$xml_content = substr($content, 4, $xml_len);$from_corpid = substr($content, $xml_len + 4);} catch (Exception $e) {print $e;return array(ErrorCode::$DecryptAESError, null);}if ($from_corpid != $corpid)return array(ErrorCode::$ValidateSuiteKeyError, null);return array(0, $xml_content);}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

6:测试回调url示例

public function actionReceiveCallBack(){//接收值 sign 时间戳   $signature=$_GET['signature'];    $nonce=$_GET['nonce'];         $timeStamp=$_GET['timestamp'];$suiteKey=Yii::$app->params['corpid'];//必填,企业ID$token="dingtalk";    //必须和在注册是一样//接收传过来的需要解密的值$postdata = file_get_contents("php://input");$postList = json_decode($postdata,true);$encrypt = $postList['encrypt'];//注册时加密的key$aesKey=\Yii::$app->params['aes_key'];    $aes_key_encode=base64_encode($aesKey);$aes_key=substr($aes_key_encode,0,-1);$decryptMsg="";$crypt = new DingCallbackCrypt($token,$aes_key,$suiteKey);$encryData = $crypt->DecryptMsg($signature,$timeStamp,$nonce,$encrypt,$decryptMsg);  //解密if($encryData['errcode']!==0){}else{if($newData->EventType=="bpms_task_change"||$newData->EventType=="bpms_instance_change"){$dingtalk=new DingtalkController();$dingtalk->UpdateProcess($newData->processInstanceId);}$msg="success";$encryptMsg="";$data = $crypt->EncryptMsg($msg,$timeStamp,$nonce,$encryptMsg);   //加密if($data['errcode']!=0){}else{return $data['data'];   //返回加密成功的json数据 }    }}1234567891011121314151617181920212223242526272829303132333435

我这里是直接将注册的事件写死了 ,需要注册其他的更改一下就可以。

  1. 钉钉业务事件回调 - 回调管理API

  2. 回调事件消息体加密

php接入钉钉注册回调相关推荐

  1. 钉钉OA审批事件回调遇坑梳理-如何注册多个事件回调

    项目场景: 问题:使用钉钉http调用事件回调注册,遇坑 本项目有两套服务. 当 600 服务,在使用钉钉注册回调的接口后,再次注册800回调服务,800 回调会覆盖掉600服务 测试服务 600 正 ...

  2. 钉钉 ISV 接入流程

    1. 基本概念 相较于 Web 领域经常碰到的 OAuth2 这类简单的三方授权模型,钉钉的 ISV 接入流程涉及的东西比较多一点,所以在正式开始之前,先把过程中会见到的各种概念拿出来说一下,同时,先 ...

  3. 把盏言欢,款款而谈,ChatGPT结合钉钉机器人(outgoing回调)打造人工智能群聊/单聊场景,基于Python3.10

    就像黑火药时代里突然诞生的核弹一样,OpenAI的ChatGPT语言模型的横空出世,是人工智能技术发展史上的一个重要里程碑.这是一款无与伦比.超凡绝伦的模型,能够进行自然语言推理和对话,并且具有出色的 ...

  4. C#实现企业应用接入钉钉

    本文属于个人原创作品.个人总结,谢绝转载.抄袭.如果您有疑问或者希望沟通交流,可以联系QQ:865562060. 一.开始接入 1.开始接入钉钉之前,首先需要了解企业接入钉钉的概述:https://o ...

  5. python版钉钉回调

    说明: 因为公司项目有两个系统这两个系统都需要同步审批回调事件所以些了这个钉钉回调分发的中转服务. 话不多说开始上代码 1.首先创建出需要的模型字段 from django.db import mod ...

  6. 钉钉中添加回调监听事件

    此类是HttpRequest.java -------------------------------------------------------------------------------- ...

  7. Spring Boot 接入钉钉扫码登录

    公司如果有在使用钉钉,向企业管理员申请一个开发者权限. 如果觉得麻烦,可以自己去钉钉平台注册一个企业,不需要认证的. 创建第三方授权应用 1. 选择 工作台 tab 页 2. 拉取至末尾,选择自建应用 ...

  8. java信息化平台_Java开源企业信息化平台O2OA接入企业钉钉

    此篇参照钉钉新的微应用添加接口规范编写,希望对大家有用. 如果O2OA成功接入钉钉,O2OA将会自动从钉钉拉取所有的人员和组织进行同步,O2OA的所有人员和组织以企业钉钉中创建的组织架构为准( 本地已 ...

  9. O2OA接入企业钉钉 - 在钉钉上使用移动办公(新版)

    此篇参照钉钉新的微应用添加接口规范编写,希望对大家有用. 如果O2OA成功接入钉钉,O2OA将会自动从钉钉拉取所有的人员和组织进行同步,O2OA的所有人员和组织以企业钉钉中创建的组织架构为准( 本地已 ...

最新文章

  1. SSM实现网上商城 有聊天功能
  2. 从pandas resample说起,然后再超越resample,通过pd.Grouper、groupby、agg
  3. 学号 20175223 《Java程序设计》第4周学习总结
  4. keras faster物体检测_URPC 2019水下目标检测竞赛冠军方案:多图像融合增强
  5. 绝!关于pip的15个使用小技巧
  6. 送书 | 主成分分析PCA
  7. VMware虚拟机关闭后托盘运行设置
  8. 个性化推荐认知之----数字化转型浪潮下,产品经理应如何重新认知个性化推荐?...
  9. 算法是什么我记不住,But i do it my way. (二)
  10. windows找不到文件gpedit.msc_极简技术|电脑文件全搜索,没有找不到的东西
  11. Spanning Tree Protocol (STP) in NetScaler Appliance
  12. 题目263-精 挑 细 选
  13. linux 简单的cpu压力测试
  14. Windows、Linux下安装Redis图文教程
  15. Python 3个小练习
  16. 关于同比和环比的几个问题
  17. gitlab找回已删除的分支
  18. 关于前几天的招聘,我说几点
  19. 热点登陆打不开网页 服务器已关闭,手机登录路由器管理页面打不开怎么办?...
  20. 实验三:CART回归决策树python实现(两个测试集)(二)|机器学习

热门文章

  1. Web版2048游戏制作
  2. 【译】LiveData三连
  3. 流程图软件测评:Visio和亿图图示
  4. 织梦dedecmsTAG出现404页面的解决办法
  5. Android App设计架构
  6. Kbone与小程序跨端开发的一些思考
  7. 【纯净安装、免U盘】无视win11硬件要求,直接setup.exe安装win11
  8. 从入门到入土:IP源地址欺骗dos攻击实验
  9. C++ 变量的生存期
  10. 电子商城数据库设计思路