企业微信服务商代开发自建应用配置以及对接

目录

1.代开发应用模板创建与配置

1.1创建代开发应用模板

 1.2模板配置开发信息

1.3模板回调处理微信后台通知事件

1.4应用回调URL配置

1.5获取代开发应用secret(permanent_code)

2.代开发应用上线

3.代开发应用获取企业微信用户信息


1.代开发应用模板创建与配置

1.1创建代开发应用模板

 1.2模板配置开发信息

1.服务商代开发模板回调URL

说明:后续企业微信后台部分通知会推送到此回调URL

注意:这里配置时会要求验证代开发模板回调URL,这里可以使用官方的加解密库进行验证

服务端加解密方案说明:https://developer.work.weixin.qq.com/devtool/introduce?id=36388

官方加解密库示例下载:https://developer.work.weixin.qq.com/devtool/introduce?id=10128

  • 这里以php版本为例

 

1.目录结构 

2.验证url正确性需要参数

encodingAesKey //模板配置开发信息中的EncodingAesKey
Token //模板配置开发信息中的Token
corpId //服务商id 企业服务商后台通用开发参数里

 

 文件:Sample.php

/*
------------使用示例一:验证回调URL---------------
*企业开启回调模式时,企业号会向验证url发送一个get请求 
假设点击验证时,企业收到类似请求:
* GET /cgi-bin/wxpush?msg_signature=5c45ff5e21c57e6ad56bac8758b79b1d9ac89fd3&timestamp=1409659589&nonce=263014780&echostr=P9nAzCzyDtyTWESHep1vC5X9xho%2FqYX3Zpb4yKa9SKld1DsH3Iyt3tP3zNdtp%2B4RPcs8TgAE7OaBO%2BFZXvnaqQ%3D%3D 
* HTTP/1.1 Host: qy.weixin.qq.com

接收到该请求时,企业应
1.解析出Get请求的参数,包括消息体签名(msg_signature),时间戳(timestamp),随机数字串(nonce)以及公众平台推送过来的随机加密字符串(echostr),
这一步注意作URL解码。
2.验证消息体签名的正确性 
3. 解密出echostr原文,将原文当作Get请求的response,返回给公众平台
第2,3步可以用公众平台提供的库函数VerifyURL来实现。*/

$encodingAesKey = 'In9LJMuhLVN6x5Qkg8Kx3DmHV3xdKnxlJrKJnYt8lxF';
$token = 'aMRVjNDZ';
$corpId = '';//服务商id

$sVerifyMsgSig = $_GET['msg_signature'];
$sVerifyTimeStamp = $_GET['timestamp'];
$sVerifyNonce = $_GET['nonce'];
$sVerifyEchoStr = $_GET['echostr'];

if (isset($sVerifyEchoStr)) {
//这里记录获取到的参数,以便调试
  $myfile = fopen("log.txt", "w") or die("Unable to open file!");
  fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyMsgSig: " . $sVerifyMsgSig . "\r\n");
  fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyTimeStamp: " . $sVerifyTimeStamp . "\r\n");
  fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyNonce: " . $sVerifyNonce . "\r\n");
  fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyEchoStr: " . $sVerifyEchoStr . "\r\n");
  // 需要返回的明文
  $sEchoStr = "123456";
  $wxcpt = new WXBizMsgCrypt($token, $encodingAesKey, $corpId);
  $errCode = $wxcpt->VerifyURL($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, $sVerifyEchoStr, $sEchoStr);
  if ($errCode == 0) {
    echo $sEchoStr;
    // 验证URL成功,将sEchoStr返回
    // HttpUtils.SetResponce($sEchoStr);
  } else {
    print("ERR: " . $errCode . "\n\n");
    //fwrite($myfile, "" . date('Y-m-d H:i:s') . "----errCode: " . $errCode . "\r\n");
  }
  fclose($myfile);
}

到这里,模板配置成功.

1.3模板回调处理微信后台通知事件

回调接口官方概述:https://developer.work.weixin.qq.com/document/path/90613

目前常用到的通知事件有

请求的包体中InfoType代表通知事件类型

1.推送suite_ticket:https://developer.work.weixin.qq.com/document/path/90628

 2.授权成功通知事件:https://developer.work.weixin.qq.com/document/path/90642

这个里面拿到的auth_code可以获取到应用secret,secret用于获取应用access_token,该access_token用于获取用户敏感信息

 3.重置永久授权码通知事件:https://developer.work.weixin.qq.com/document/path/94758

这个里面拿到的auth_code可以获取到应用secret,secret用于获取应用access_token,该access_token用于获取用户敏感信息

注意:

1.下面这个处理逻辑仍然是在模板回调url指向的文件里,前面url正确性验证通过后需要注释掉验证url正确性相关逻辑代码,不然会出错。

2.通知收到以后,必须立即作出响应,文档里的通知事件响应是返回一个success字符串

文件:Sample.php

1.处理事件需要参数

encodingAesKey //模板配置开发信息中的EncodingAesKey
Token //模板配置开发信息中的Token
corpId // 这里用的是刚刚创建成功的模板id

 

$encodingAesKey = '';
$token = '';
$corpId = ''; //模板id

$cn = new CommonFunc(); //公共函数类
$sReqMsgSig = $_GET["msg_signature"];
$sReqTimeStamp = $_GET["timestamp"];
$sReqNonce = $_GET['nonce'];
// 获取post请求的密文数据
$sReqData =  file_get_contents("php://input");
$sMsg = "";  // 解析之后的明文
$wxcpt = new WXBizMsgCrypt($token, $encodingAesKey, $corpId);
$errCode = $wxcpt->DecryptMsg($sReqMsgSig, $sReqTimeStamp, $sReqNonce, $sReqData, $sMsg);
$myfile = fopen("log.txt", "w") or die("Unable to open file!");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----msg_signature: " . $sReqMsgSig . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----timestamp: " . $sReqTimeStamp . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----nonce: " . $sReqNonce . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sReqDatas: " . $sReqData . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sMsg: " . $sMsg . "\r\n");
if ($errCode == 0) {
  // 解密成功,sMsg即为xml格式的明文
  //var_dump($sMsg);
  echo 'success'; //响应企业微信的请求
  // TODO: 对明文的处理
  /*
  "<xml>
      <SuiteId><![CDATA[dk623666a23e0de46f]]></SuiteId>
      <AuthCode><![CDATA[uRRKjj2uhp5nLyTHb-s-32ddSru9zK-6Jy3hmuOTQFPWj-dseQ2L9bGXyfbEaWYa4jU43C5AmWl_bbGoAbfL9rKcZgqUrH_xIKtAds0Z1oc]]></AuthCode>
      <InfoType><![CDATA[reset_permanent_code]]></InfoType>
      <TimeStamp>1661756691</TimeStamp>
  </xml>"
*/
  //解析xml数据
  $arr = (array)simplexml_load_string($sMsg, 'SimpleXMLElement', LIBXML_NOCDATA);
  $InfoType = $arr['InfoType'];
  if ($InfoType == 'reset_permanent_code') {
    //重置授权码通知事件
    fwrite($myfile, "" . date('Y-m-d H:i:s') . "----AuthCode: " . $arr['AuthCode'] . "\r\n");
    $auth_code_file = fopen("auth_code.txt", "w");
    fwrite($auth_code_file, $arr['AuthCode']);
    fclose($auth_code_file);
    //保存授权应用密钥
    $cn->getSecret();
  } else if ($InfoType == 'suite_ticket') {
    //推送suite_ticket通知事件
    fwrite($myfile, "" . date('Y-m-d H:i:s') . "----SuiteTicket: " . $arr['SuiteTicket'] . "\r\n");
    $suite_ticket_file = fopen("suite_ticket.txt", "w");
    fwrite($suite_ticket_file, $arr['SuiteTicket']);
    fclose($suite_ticket_file);
  } else if ($InfoType == 'create_auth') {
    //授权成功通知通知事件
    fwrite($myfile, "" . date('Y-m-d H:i:s') . "----AuthCode: " . $arr['AuthCode'] . "\r\n");
    $auth_code_file = fopen("auth_code.txt", "w");
    fwrite($auth_code_file, $arr['AuthCode']);
    fclose($auth_code_file);
    //保存授权应用密钥
    $cn->getSecret();
  }
} else {
  fwrite($myfile, "" . date('Y-m-d H:i:s') . "----errCode: " . $errCode . "\r\n");

  //exit(-1);
}
fclose($myfile);

 公共函数类

class CommonFunc
{

  /**
   * 获取应用授权的token(suite_access_token)
   * 获取步骤 
   * 1.通过suite_id(第三方应用ID),suite_secret(第三方应用密钥),suite_ticket(推送suite_ticket通知事件)换取suite_access_token
   */
  public function getSuitAccessToken()
  {
    $suite_ticket_arr = file("suite_ticket.txt");
    $suite_ticket = $suite_ticket_arr[0];
    $suite_id = '';
    $suite_secret = '';
    //获取文件缓存中的suit_access_token
    $suite_access_token_arr = file("suite_access_token.txt");
    $suite_access_token = $suite_access_token_arr[0];
    $last_time = strtotime($suite_access_token_arr[1]);
    $now_time = time();
    $save_time = $now_time + 1.5 * 60 * 60;
    //一个半小时获取一次
    if ($last_time - $now_time < 1800) {
      $url = 'https://qyapi.weixin.qq.com/cgi-bin/service/get_suite_token';
      $post_data = array(
        'suite_id' => $suite_id,
        'suite_secret' => $suite_secret,
        'suite_ticket' => $suite_ticket
      );
      $header = array('Content-type' => '');
      $result = $this->curl_post($url, $post_data, 5, $header, 'json');
      $suite_access_token_file =  fopen("suite_access_token.txt", "w");
      fwrite($suite_access_token_file, $result['suite_access_token'] . "\r\n");
      fwrite($suite_access_token_file, date('Y-m-d H:i:s', $save_time) . "\r\n");
      fclose($suite_access_token_file);
    }

    return $suite_access_token;
  }
  /**
   * 获取代开发应用secret
   *  获取步骤 
   * 1.通过重置授权码通知事件获取auth_code(需要在服务商后台重置secret进行触发)
   * 2. 获取应用授权的token(suite_access_token)
   * 3.根据1,2步骤获取的参数去得到secret
   */
  public function getSecret()
  {
    $auth_code_arr = file("auth_code.txt");
    $auth_code = $this->ClearHtml($auth_code_arr[0]);
    $suite_access_token = $this->ClearHtml($this->getSuitAccessToken());
    $url = 'https://qyapi.weixin.qq.com/cgi-bin/service/get_permanent_code?suite_access_token=' . $suite_access_token;
    $post_data = array(
      'auth_code' => $auth_code,
    );
    $header = array('Content-type' => '');
    //file_get_contents进行post请求,这里使用curl,报错提示网址错误,原因未知
    $res =$this->file_post($url, $post_data, 5, $header, 'json');
    $result = json_decode($res,true);
    $myfile = fopen("log.txt", "w");
    fwrite($myfile, $res);
    fclose($myfile);
    $secret = $result['permanent_code'];
    $secret_file =  fopen("secret.txt", "w");
    fwrite($secret_file, $secret);
    fclose($secret_file);
  }
  /**
   * 
   * curl post请求
   * 
   */
  public function curl_post($url, $post_data = array(), $timeout = 5, $header = "", $data_type = "")
  {
    $header = empty($header) ? '' : $header;
    //支持json数据数据提交
    if ($data_type == 'json') {
      $post_string = json_encode($post_data);
    } elseif ($data_type == 'array') {
      $post_string = $post_data;
    } elseif (is_array($post_data)) {
      $post_string = http_build_query($post_data, '', '&');
    }
    $ch = curl_init();    // 启动一个CURL会话
    curl_setopt($ch, CURLOPT_URL, $url);     // 要访问的地址
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  // 对认证证书来源的检查   // https请求 不验证证书和hosts
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
    curl_setopt($ch, CURLOPT_POST, true); // 发送一个常规的Post请求
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);     // Post提交的数据包
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);     // 设置超时限制防止死循环
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     // 获取的信息以文件流的形式返回 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //模拟的header头
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
      $curl_log = fopen("curl_log.txt", "w");
      fwrite($curl_log, date('Y-m-d H:i:s') . '--curl请求错误网址:' . $url . "\r\n");
      fwrite($curl_log, date('Y-m-d H:i:s') . '--curl请求错误' . curl_errno($ch) . "\r\n");
      fclose($curl_log);
    }
    $result = json_decode($result, true);
    curl_close($ch);
    return $result;
  }

  /**
   * file_get_contents进行post请求
   */
  public  function file_post($url, $post_data, $timeout = 5, $header = "", $data_type = "")
  {
    $postdata = json_encode($post_data);
    $options = array(
      'http' => array(
        'method' => 'POST',
        'header' => 'Content-type:application/x-www-form-urlencoded',
        'content' => $postdata,
        'timeout' => 15 * 60 // 超时时间(单位:s)
      )
    );
    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);
    return $result;
  }
  public  function ClearHtml($str)
  {
    $str = trim($str); //清除字符串两边的空格
    $str = strip_tags($str, ""); //利用php自带的函数清除html格式
    $str = preg_replace("/\t/", "", $str); //使用正则表达式替换内容,如:空格,换行,并将替换为空。
    $str = preg_replace("/\r\n/", "", $str);
    $str = preg_replace("/\r/", "", $str);
    $str = preg_replace("/\n/", "", $str);
    $str = preg_replace("/ /", "", $str);
    $str = preg_replace("/  /", "", $str);  //匹配html中的空格
    return trim($str); //返回字符串
  }
}

到这里模板回调url配置完成。

1.4应用回调URL配置

这里暂时用已配置好的代开发应用配置示例

注意:这里Token和EncodingAESKey最好和模板配置开发时的保持一致

文件:CorpSample.php

验证URL回调

注意,应用的验证URL回调与模板的验证URL回调有点不一样这里不是直接用服务商id

这里企业主体的corpid需要转换为服务商的密文corpid

corpid转换 代开发应用安全性升级 - 接口文档 - 企业微信开发者中心

获取服务商凭证:https://developer.work.weixin.qq.com/document/path/91200 

 所需要的参数

$encodingAesKey = '';   //配置的encodingAesKey
$token = '';//配置的token
$corpId = ''; //企业号id 登录企业微信后台,我的企业即可看到

//服务商通用开发参数
$sCorpid = '';
$sProviderSecret = '';

逻辑代码

$encodingAesKey = 'In9LJMuhLVN6x5Qkg8Kx3DmHV3xdKnxlJrKJnYt8lxF';
$token = 'aMRVjNDZ';
$corpId = ''; //企业号id

//服务商通用开发参数
$sCorpid = '';
$sProviderSecret = '';
$cn = new CommonFunc();
//获取服务商凭证
$sProviderToken = $cn->getProviderToken($sCorpid, $sProviderSecret);
$provider_access_token  = $sProviderToken['provider_access_token'];
//获取转化呢后的密文corpid
$open_corpid_data = $cn->corpidChange($corpId, $provider_access_token);
$open_corpid = $open_corpid_data['open_corpid'];
$sVerifyMsgSig = $_GET['msg_signature'];
$sVerifyTimeStamp = $_GET['timestamp'];
$sVerifyNonce = $_GET['nonce'];
$sVerifyEchoStr = $_GET['echostr'];

$myfile = fopen("log.txt", "w") or die("Unable to open file!");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyMsgSig: " . $sVerifyMsgSig . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyTimeStamp: " . $sVerifyTimeStamp . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyNonce: " . $sVerifyNonce . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyEchoStr: " . $sVerifyEchoStr . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----provider_access_token: " . $provider_access_token . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----open_corpid: " . $open_corpid . "\r\n");
// 需要返回的明文
$sEchoStr = "123456";
$wxcpt = new WXBizMsgCrypt($token, $encodingAesKey, $open_corpid);
$errCode = $wxcpt->VerifyURL($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, $sVerifyEchoStr, $sEchoStr);
if ($errCode == 0) {
  echo $sEchoStr;
  // 验证URL成功,将sEchoStr返回
  // HttpUtils.SetResponce($sEchoStr);
} else {
  fwrite($myfile, "" . date('Y-m-d H:i:s') . "----errCode: " . $errCode . "\r\n");
}
fclose($myfile);

class CommonFunc
{
  /**
   * 获取服务商的token
   * @param string $sCorpId 服务商管理后台通用开发参数-corpid
   * @param string $sProviderSecret 服务商管理后台通用开发参数-ProviderSecret
   */
  public function getProviderToken($sCorpid, $sProviderSecret)
  {
    $url = 'https://qyapi.weixin.qq.com/cgi-bin/service/get_provider_token';
    $res = $this->curl_post($url, array('corpid' => $sCorpid, 'provider_secret' => $sProviderSecret), 5, array('Content-type' => ''), 'json');
    return $res;
  }
  /**
   * 
   * corpid转化
   * @param string $sCorpid 企业明文corpid
   * @param string $sToken 服务商token 
   */
  public function corpidChange($sCorpId, $sToken)
  {
    $url = 'https://qyapi.weixin.qq.com/cgi-bin/service/corpid_to_opencorpid?provider_access_token=' . $sToken;
    $res = $this->curl_post($url, array('corpid' => $sCorpId), 5, array('Content-type' => ''), 'json');
    return $res;
  }
  /**
   * 
   * curl post请求
   * 
   */
  public function curl_post($url, $post_data = array(), $timeout = 5, $header = "", $data_type = "")
  {
    $header = empty($header) ? '' : $header;
    //支持json数据数据提交
    if ($data_type == 'json') {
      $post_string = json_encode($post_data);
    } elseif ($data_type == 'array') {
      $post_string = $post_data;
    } elseif (is_array($post_data)) {
      $post_string = http_build_query($post_data, '', '&');
    }
    $ch = curl_init();//启动一个CURL会话
    curl_setopt($ch, CURLOPT_URL, $url); // 要访问的地址
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //对认证证书来源的检查https请求 不验证证书和hosts
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//从证书中检查SSL加密算法是否存在
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);//模拟用户使用的浏览器
    curl_setopt($ch, CURLOPT_POST, true); // 发送一个常规的Post请求
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); // Post提交的数据包
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);// 设置超时限制防止死循环
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 获取的信息以文件流的形式返回 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //模拟的header头
    $result = curl_exec($ch);
    $result = json_decode($result, true);
    curl_close($ch);
    return $result;
  }

至此,应用回调url配置成功

1.5获取代开发应用secret(permanent_code)

1.通过suite_id(模板ID),suite_secret(模板Secret),suite_ticket(推送suite_ticket通知事件)换取suite_access_token

参考:https://developer.work.weixin.qq.com/document/path/90600

2.通过前面的授权成功通知事件或者重置永久授权码通知事件拿到的auth_code,

3.根据1,2步骤获取的参数去得到secret(获取企业永久授权码)

参考:https://developer.work.weixin.qq.com/document/path/90603

2.代开发应用上线

3.代开发应用获取企业微信用户信息

注意:这里需要授权企业登录企业微信后台对用户信息进行授权

这部分参考的是企业微信的自建应用开发,不是第三方应用开发

需要参数

     'permanent_code'=>'',//代开发应用secret(永久授权码)
     'corpid'=>'',//企业明文CorpID
 	 'redirect_url'=>'',//授权重定向地址 
     'agentid'=>'1000006',//应用id

1.通过OAuth2的授权登录前端获取到code,

  • 参考:https://developer.work.weixin.qq.com/document/path/91119
  • 2.后端通过前端提交的code,去获取access_token
  • 这里面的corpsecret是前面获取的企业永久授权码 corpid就是企业明文id
  • 参考:https://developer.work.weixin.qq.com/document/path/91039
  • 3.获取访问用户身份
  • 这里会获取到用户的USERID,scope为snsapi_privateinfo,且用户在应用可见范围之内时返回user_ticket,
  • 后续利用该参数可以获取用户信息或敏感信息
  • 参考:https://developer.work.weixin.qq.com/document/path/91023
  • 4.获取用户详情
  • 这里获取的是用户的基本信息,不包括敏感信息
  • 参考:https://developer.work.weixin.qq.com/document/path/90196
  • 5.获取用户敏感信息
  • 参考https://developer.work.weixin.qq.com/document/path/95833

这里有个坑:使用开发者工具调试时,只能获取一次敏感信息,后续就不能,后来研究发现应该是微信开发者工具还未优化好这一部分,在真机上测试是正常的。开发者工具版本:1.06.2208010

橘柒啊
关注 关注
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
企业微信自建应用如何使用?鲸会务开发功能已上线
Meeting_talent的博客
03-18 473
鲸会务推出自建应用功能,帮助企业客户将会议组织与管理工作“搬进”企业微信,让会议管理更加便捷、高效、安全。
Thinkphp内核2020最新小微支付服务商专用整站源码 微信服务商集成系统(已对接微信+支付宝支付)
09-12
最近很火的Thinkphp内核小微支付服务商专用源码, 采用Thinkphp框架开发,完全开源,...目前市面最火的模式,微信服务商集成系统,可向用户提供微信小微商户进件及支付Api 可以线上支付,5分钟即可入驻一个微信商户。
企业微信开发应用回调
05-13
1.企业微信开发应用回调解析码。 2.开箱即用,文档、码清晰。 3.按照企微规范定义controller的接值,能实现企微开发回调的GET校验,POST传值,快速响应,异步处理。 4.按照企微规范实现回调数据的验签解析。开发人员只需要注重自己的业务码。 4.按照企微规范提供丰富的转译实体类,xml直接转为可实用的bean对象,开发人员无需再去写繁重复杂的实体类
企业微信自建开发应用开发
06-03
快速了解及入门企业微信自建开发应用开发自建开发H5应用、小程序应用简单demo快速入门。
企业微信建设开发应用的基本流程及实现
goGoing_的博客
06-12 4187
如我方是科技服务公司A,有一家公司B,B提出想在自己的企业微信工作台上,上线一个xxx功能,但是B公司没有自己的研发人员去实现完成,且也没有服务器去支撑。所以找到了A。A通过自己家的企业微信,创建一个模板,让B的管理员扫码授权后,A的研发人员可以在模板下开发应用,提交上线到B的企业微信中。这就是开发应用微信官方的解释:当前第三方服务商企业开发自建应用时,需要线下获取企业的各类密钥数据,流程复杂、管理成本高且权限获取有安全合规风险。
easy WeChat 配置 企业微信开发模板回调URL(PHP版本)
FixMoreBugs的博客
11-01 1140
easy WeChat 配置 企业微信开发模板回调URL(PHP版本)
企业微信开发
10-02
企业微信开发Demo
企业微信开发应用步骤(小程序、H5同理)
qq_41578884的博客
01-08 1349
PDF/OFD源文件 wx.qy.chooseMessageFile。本地文件(图片/PDF/OFD源文件)uni.chooseFile。本地文件(图片/PDF/OFD源文件)uni.chooseFile。从会话选择文件(图片/PDF/OFD源文件)wx.invoke。PDF/OFD源文件 wx.chooseMessageFile。XML源文件 wx.qy.chooseMessageFile。PDF/OFD源文件 uni.chooseFile。PDF/OFD源文件 uni.chooseFile。
企业微信自建应用开发上线流程,只看此文就够了(下)
Geek进阶
05-06 5248
1、模板上线 1.1、开发应用等待审核完成后,在服务商后台看到的界面如下图 1.2、点击模板,可以看到提交上线按钮 1.3、点击提交后确认,将完成模板的上线;在应用开发菜单将能看到应用的安装二维码 1.4、此时则可以进行测试安装 2、开发应用安装 2.1 使用测试企业企业微信帐号扫模板码 授权开发 2.2 同意授权并添加   同意后完成了开发应用的授权安装,但此时并不能在测试企业后台看到该应用。需要服务商完成开发操作! 3、开发应用
企业微信开始开发应用 配置开发应用回调URL
FixMoreBugs的博客
11-03 2595
企业微信开始开发应用 配置开发应用回调URL
一个基于 Laravel 开发微信企业微信 SDK.zip
05-20
一个基于 Laravel 开发微信企业微信 SDK.zip
企业微信PHP-SDK(ThinkPHP5.*版本)
11-17
这是企业微信的PHP-SDK,根据需要改写成ThinkPHP5.*版本下的extend拓展库格式,只需按照Tp5的extend第三方类库方法加载此SDK即可使用
企业微信接口码php版本
05-31
企业微信接口码php版本
企业微信apiPHPdemo大全
05-18
该demo有利于初学者更好的了解api的结构组成,
亲测完整微信企业回调模式URL验证
10-16
自己前段时间在做微信,刚刚开始企业回调模式验证总是出问题,找了很多码,结果都不行,本人现在整理了一个完整的回调模式的验证码,只需改三个参数即可。
thinkphp 6对接微信服务商demo
最新发布
01-18
对接微信服务商付通功能:二级商户进件,小程序下单 ,分账等
微信支付服务商扫码支付实例-php
06-23
微信支付服务商的支付功能开发,扫码支付实例,已经调式好的
商户对接 微信支付
02-21
商户对接微信支付 源码更容易理解!
C#实现微信企业号API服务端调用封装
04-27
2.1 生成企业服务商网站引导用户进入登录授权页的url 2.2 获取企业号登录信息 3、通讯录方法 3.1 获取部门列表 3.2 获取成员,管理组须拥有指定成员的查看权限 3.3 获取部门成员 4、素材方法 4.1 上传媒体文件 4.2...
企业微信服务商智慧硬件v2.0答案
07-23
### 回答1: 企业微信服务商智慧硬件V2.0是企业微信平台上的一项新功能,它可以使企业微信服务商能够开发和管理智能硬件产品。 首先,企业微信服务商智慧硬件V2.0可以帮助企业微信服务商更好地开发智能硬件产品。它提供了一些开发工具和接口,使开发者能够更轻松地进行硬件设备的开发和定制。开发者可以根据企业需求,开发各种类型的硬件设备,如智能门禁、智能会议设备等。 其次,企业微信服务商智慧硬件V2.0还提供了一套完整的设备管理解决方案。通过这个解决方案,企业微信服务商可以方便地对智能硬件设备进行远程管理。他们可以实时监控设备的使用情况、维护设备的状态,并对设备进行远程控制和管理。这样,企业微信服务商可以更加高效地运营和维护硬件设备。 另外,企业微信服务商智慧硬件V2.0还提供了一些其他的功能和服务。例如,它可以帮助企业微信服务商实现智能办公,通过智能硬件设备提供更加便捷和高效的办公环境。它还可以实现设备的互联互通,使不同设备之间可以进行数据共享和联动操作,提升工作效率。 综上所述,企业微信服务商智慧硬件V2.0是企业微信平台上的一项重要功能,它为企业微信服务商提供了一系列开发、管理和应用智能硬件的解决方案。通过这个功能,企业微信服务商可以更好地满足企业的需求,提供更加高效和智能的企业服务。 ### 回答2: 企业微信服务商智慧硬件v2.0是为企业客户提供的一款智能硬件解决方案。它具有以下特点: 1. 多样化的硬件设备:企业微信服务商智慧硬件v2.0提供多种不同类型的硬件设备,涵盖了智能门锁、智能投影仪、智能会议系统等多个领域,满足企业不同场景和需求。 2. 云端管理平台:企业微信服务商智慧硬件v2.0配备了完善的云端管理平台,企业可以通过该平台实时监控设备状态、对设备进行远程管理和控制,方便快捷地解决设备故障和问题。 3. 数据安全与隐私保护:企业微信服务商智慧硬件v2.0严格遵守数据安全和隐私保护的要求,确保企业和用户的数据得到有效的保护,避免因数据泄露等安全问题带来的风险。 4. 全面的第三方接入支持:企业微信服务商智慧硬件v2.0提供了全面的第三方接口和SDK支持,方便企业将其现有的业务系统与智慧硬件进行对接,实现智能化的管理和运营。 5. 提供个性化定制服务:企业微信服务商智慧硬件v2.0可以根据企业的需求进行个性化定制,满足企业特定的功能和样式要求,增强企业形象和用户体验。 总之,企业微信服务商智慧硬件v2.0作为一款智能硬件解决方案,具有多样化的硬件设备、云端管理平台、数据安全与隐私保护、第三方接入支持和个性化定制服务等特点,为企业提供了便捷、安全和高效的智能化管理和运营解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Linux将硬盘挂载到指定目录上 11833
  • mysql5.7修改账户密码 8716
  • 企业微信服务商代开发自建应用配置以及对接 5145
  • JAVA环境安装 4945
  • 大屏自适应rem方案 3231

分类专栏

  • uni-app 4篇
  • linux 5篇
  • java 1篇
  • mysql 3篇
  • wordpress 1篇

最新评论

  • JAVA环境安装

    weixin_71077816: 我的安装的时候没显示jre正常吗

  • 企业微信服务商代开发自建应用配置以及对接

    挥洒寂寞: 请教一个问题,同一个模板如何给多个企业使用

  • 日常js笔记

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)增加内容的多样性(例如使用标准目录、标题、图片、链接、表格等元素);(2)使用更多的站内链接;(3)使用标准目录。

  • 日常PHP记录

    ctotalk: 努力奋斗

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • PHP保存日志
  • js使用Lodop对接打印机
  • PHP加密拓展PHP-beast使用
2023年3篇
2022年21篇
2021年4篇
2020年4篇
2019年1篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码东营关键词按天收费价格湘西网站关键词优化报价丽江关键词按天计费多少钱那曲网站定制哪家好光明网络广告推广报价金昌网站设计模板公司乐山企业网站改版推荐玉林推广网站价格河池模板网站建设报价广东设计公司网站推荐扬州关键词排名哪家好舟山SEO按天计费多少钱张北网站搜索优化哪家好泸州关键词按天扣费报价石岩优秀网站设计报价渭南网页设计漳州网站推广多少钱同乐建设网站海北网站建设设计公司抚顺网站开发推荐济南百度竞价包年推广推荐海南高端网站设计哪家好潮州网站建设设计价格铁岭企业网站建设推荐自贡至尊标王推荐宜宾至尊标王价格迪庆SEO按天收费黑河网页制作咸宁企业网站制作哪家好鹰潭seo排名推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化