Enterprise Wechat Facilities
Categories
Component ID
Component name
Component type
Maintenance status
Development status
Component security advisory coverage
Downloads
Component created
Component changed
Component body
Integration with with Enterprise Wechat. Weixin (wechat) is a popular mobile app in China, which have 6500 million active users. Enterprise Wechat is only used in China; the document and the description of this module use Chinese.
PLEASE NOTICE that Enterprise Wechat Facilities the product itself is only available in Chinese, so the module authors will publish manual and usage notice under Chinese.
用法
- ä½ å¿…é¡»å…ˆåœ¨ä¼ä¸šå¾®ä¿¡ç½‘站申请一个账户,并且获得相应的 Corp ID 和管ç†ç»„ Secret。 ç›®å‰æœ¬æ¨¡å—åªæ”¯æŒåœ¨ä¸€ä¸ªsite使用一组corpid。如果在微信ä¼ä¸šå·ä¸ä¸€ä¸ªç®¡ç†å‘˜é€šè¿‡ç®¡ç†å‘˜æƒé™ç»„的方å¼ç®¡ç†å¤šä¸ªåº”用,å¯ä»¥ä½¿ç”¨å…¨å±€corpsecret。
由于ä¼ä¸šå¾®ä¿¡ä¸æ¯ä¸ªåº”用的secret都ä¸åŒï¼Œåˆ™å¿…须为æ¯ä¸ªagentå•独设置secret,æ‰èƒ½åœ¨ä¸€ä¸ªå®žæ–½ä¸æ”¯æŒå¤šä¸ªä¼ä¸šå¾®ä¿¡åº”用。但必须设置全局corpsecret以便获得å¯è§çš„应用列表。 - 在 Drupal 的扩展页é¢å¯ç”¨æ¤æ¨¡å—。
æ’ä»¶
本模å—ä¸åŒ…å«ä»»ä½•应用或Agent的实现,而使用Drupalçš„æ’件机制æ¥ç®¡ç†Agent。æ„å³ï¼Œä½ 必须在 DrupalqyweixinAgentBase 这个类的基础上自行派生类,并将其放置在模å—çš„ src/Plugin/QyWeixinAgent 目录下,作为微信ä¼ä¸šå·çš„æ’ä»¶ã€‚æ’件使用 Annotation æ–¹å¼å‘现,所以foo模å—的微信ä¼ä¸šå·æ’ä»¶ (foo/src/Plugin/QyWeixinAgent/Bar.php) åº”è¯¥ç±»ä¼¼è¿™æ ·ï¼š
/**
* @file
* Contains DrupalfooPluginQyWeixinAgentBar.
*/
namespace DrupalfooPluginQyWeixinAgent;
use DrupalqyweixinCorpBase;
use DrupalqyweixinAgentBase;
/**
* foo interface for qyweixin.
*
* @QyWeixinAgent(
* id = "foo",
* )
*/
class Bar extends AgentBase {
}
本模å—ç›®å‰åªæ”¯æŒæ’件类与应用(Agent)çš„ä¸€å¯¹ä¸€å…³ç³»ï¼Œæ— æ³•å°†ä¸åŒçš„应用对应到åŒä¸€ä¸ªç±»ä¸Šã€‚
æ’ä»¶å¯è‡ªè¡Œå†³å®šå°†é…ç½®è¡¨å•æ”¾ç½®åœ¨å“ªé‡Œã€‚æ’ä»¶å¯ä»¥è‡ªå®šä¹‰è·¯ç”±æˆ–èœå•,但若æ¤é…置仅仅与微信有关,å¯ä»¥å†™åœ¨foo.links.task.ymlä¸ï¼Œä½œä¸ºå¾®ä¿¡ä¼ä¸šå·é…置页的一个tab。如:
foo.admin.qyweixin:
title: 'Foo settings'
route_name: foo.admin.qyweixin
base_route: qyweixin.admin
主动调用
主动调用时,应该生æˆä¸€ä¸ªæœ¬æ’件的实例:
use DrupalqyweixinMessageBase;
$agent=Drupal::service('plugin.manager.qyweixin.agent')->createInstance('foo');
try {
$msg=new MessageBase();
$msg->setMsgType(MessageBase::MESSAGE_TYPE_TEXT)->setContent('Hello World')
->setToUser(USER_ID);
$agent->messageSend($msg);
} catch(Exception $e) {
var_dump($e->getMessage());
}
请注æ„,本模å—ä¸ä¼šå¯¹é”™è¯¯ä¿¡æ¯è¿›è¡Œä»»ä½•处ç†ï¼Œæ‰€æœ‰é”™è¯¯ä¿¡æ¯éƒ½å°†ä¼šä»¥å¼‚常(Exception)çš„å½¢å¼æŠ›å‡ºï¼Œè°ƒç”¨æ—¶åŠ¡å¿…è¦ä½¿ç”¨ try...catch è¯å¥ã€‚
DrupalqyweixinCorpBase æä¾›äº†ä¸€äº›é™æ€æ–¹æ³•å¯ä¾›è°ƒç”¨ï¼Œæ¯”如获得当å‰çš„ AccessTokenã€èŽ·å¾—ç›®å‰ç®¡ç†ç»„secretå¯è§çš„应用列表ã€ç®¡ç†ç´ æç‰ç‰ã€‚使用实例å¯å‚è§ qyweixin.module ä¸çš„å„个hook å’Œ DrupalqyweixinFormSettingsForm。
被动å“应
被动å“应时,本模å—会为æ¯ä¸€ä¸ªç”±æœ¬å®žæ–½æŽ¥ç®¡çš„应用创建一个路由,其URL为 /qyweixin/fooï¼Œå…¶ä¸ foo 为入å£ç±»çš„å称。在微信ä¼ä¸šå·çš„官网上设置的回调地å€åº”与æ¤ç›¸åŒã€‚请注æ„,没有接管的应用ä¸ä¼šç”Ÿæˆå¯¹åº”的路由。
æ¯ä¸ªåº”用所对应的æ’ä»¶ä¸ï¼Œåº”该至少实现一个 defaultResponse 方法。ä¼ä¸šå·æ¡†æž¶çš„ç›¸åº”è°ƒåº¦ä¼šåœ¨æ— æ³•æ‰¾åˆ°ç›¸åº”è¯·æ±‚ç±»åž‹çš„æ–¹æ³•æ—¶ï¼Œè°ƒç”¨è¯¥å‡½æ•°å–得默认的返回。而按请求类型寻找方法的顺åºå¦‚下:[MsgType][SubMsgType]Response, [MsgType]Response, defaultResponse
æ’件返回时å¯ä»¥åªè¿”回文本或图åƒï¼Œè°ƒåº¦ä¼šè‡ªåŠ¨å¡«å†™å¾®ä¿¡ä¼ä¸šå·æ‰€éœ€çš„ XML æ ¼å¼å¹¶è¿›è¡ŒåŠ å¯†ã€‚
Hook
ç›®å‰æœ¬æ¨¡å—支æŒä»¥ä¸‹hook调用:
hook_qyweixin_to_username_alter()
æ¤hookå…许第三方模å—进行通讯录账户的转æ¢ã€‚输入为ä¼ä¸šå†…部用户ID,输出为微信ä¼ä¸šå·é€šè®¯å½•用户å¸å·ã€‚hook_qyweixin_from_username_alter()
æ¤hookå…许第三方模å—进行通讯录账户的转æ¢ã€‚输入为微信ä¼ä¸šå·é€šè®¯å½•用户å¸å·ï¼Œè¾“出为ä¼ä¸šå†…部用户ID。
注æ„
第三方hookå¯ä»¥å¯¹username(å³å¾®ä¿¡ä¼ä¸šå·é€šè®¯å½•用户ID)进行任æ„çš„ä¿®æ”¹ï¼Œç”šè‡³åŒ…æ‹¬æ›´æ”¹ç±»åž‹ã€‚é‰´äºŽæ¤æƒ…况,希望第三方hookå’ŒAgentå¼€å‘者能够尽é‡ä¿æŒä¸€è‡´ï¼Œåœ¨è¿›è¡Œä¸€å¯¹å¤šæˆ–å¤šå¯¹ä¸€çš„è½¬æ¢æ—¶ï¼Œä½¿ç”¨å…ƒç´ 类型为å—ç¬¦ä¸²çš„æ•°ç»„è¿›è¡Œå¤šå€¼ä¼ é€’ï¼Œè€Œä¸æ˜¯ä½¿ç”¨è‡ªåˆ¶çš„分隔符。
