3.1.1 扩展类库:微信开发

此扩展可用于微信的服务号、订阅号、企业号等功能开发,在PhalApi框架下简单配置即可开发使用。

更多请参考WechatRobot - PHP微信机器人开发包

3.1.2 安装和配置

(1)扩展包下载

PhalApi-Library 扩展库中下载获取 Wechat 微信包,如使用:

  1. $ git clone https://git.oschina.net/dogstar/PhalApi-Library.git

然后把 Wechat 目录复制到 ./PhalApi/Library/ 下,即:

  1. $ cp ./PhalApi-Library/Wechat/ ./PhalApi/Library/ -R

到此安装完毕!接下是插件的配置。

(2)扩展包配置

为了让微信扩展包能接收来自微信服务器的信息以及返回信息给用户,我们需要在 ./Config/app.php 配置文件中追加以下配置:

  1. /**
  2. * 插件注册 - 项目级重用
  3. */
  4. 'Wechat' => array(
  5. 'plugins' => array(
  6. Wechat_InMessage::MSG_TYPE_TEXT => array('Plugin_Menu',),
  7. Wechat_InMessage::MSG_TYPE_IMAGE => array(),
  8. Wechat_InMessage::MSG_TYPE_VOICE => array(),
  9. Wechat_InMessage::MSG_TYPE_VIDEO => array(),
  10. Wechat_InMessage::MSG_TYPE_LOCATION => array(),
  11. Wechat_InMessage::MSG_TYPE_LINK => array(),
  12. Wechat_InMessage::MSG_TYPE_EVENT => array(),
  13. Wechat_InMessage::MSG_TYPE_DEVICE_EVENT => array(),
  14. Wechat_InMessage::MSG_TYPE_DEVICE_TEXT => array(),
  15. ),
  16. )

简单说明一下上面配置的作用,很明显,Key为对应的消息类型,如:文本、位置、语音、图片等;然后是各种消息类型对应的处理的类名,可以有多个,从上到下依次处理。如果觉得配置很多,可以只配置需要用到的消息类型。另外,如果你的配置是其他途径存放的,也亦然。

3.1.3 入门使用

(1)微信入口文件

可以按将下面的入口代码得到你的项目下:

  1. //$ vim ./Public/weixin/index.php
  2. <?php
  3. // echo $_GET['echostr'];
  4. // die();
  5. if (!isset($GLOBALS['HTTP_RAW_POST_DATA'])) {
  6. die('Access denied!');
  7. }
  8. require_once dirname(__FILE__) . '/../init.php';
  9. //装载项目代码和扩展类库
  10. DI()->loader->addDirs(array('Demo', 'Library'));
  11. /** ---------------- 微信轻聊版 ---------------- **/
  12. $robot = new Wechat_Lite('YourTokenHere...', true);
  13. $rs = $robot->response();
  14. $rs->output();

特别地 ,当首次接入微信时,需要将开头的两句注释去掉,以便通过微信的验证,即:

  1. // echo $_GET['echostr'];
  2. // die();

3.1.4 示例:让红包飞

(1)业务场景

现在,快要过年了,各大企业都在派红包,这里,我们也模拟一下微信服务号上红包的派发。

通常地,当我们需要添加一个新的微信服务号的功能时,可以两步走: 先开发插件,再注册插件

(2)开发插件

很简单地:

  1. // $vim ./Demo/Plugin/Money.php
  2. <?php
  3. class Plugin_Money implements Wechat_Plugin_Text {
  4. public function handleText($inMessage, &$outMessage) {
  5. $outMessage = new Wechat_OutMessage_News();
  6. $item = new Wechat_OutMessage_News_Item();
  7. $item->setTitle('让红包飞~')
  8. ->setDescription(sprintf('您已领取到一个%d元红包~', rand(1, 100)))
  9. ->setPicUrl('http://webtools.qiniudn.com/172906_61c8663a_121026.jpeg')
  10. ->setUrl('http://git.oschina.net/dogstar/PhalApi-Library');
  11. $outMessage->addItem($item);
  12. }
  13. }

(3)注册插件

开发好插件后,需要在配置添加对哪种消息开启使用该新的插件。在 ./Config/app.php 配置文件中追加以下配置:

  1. // 前面配置略 ...
  2. // 在前面追加红包插件,处理顺序由左到右
  3. Wechat_InMessage::MSG_TYPE_TEXT => array('Plugin_Money', 'Plugin_Menu', ),

(4)运行效果

webwxgetmsgimg

3.1.5 微信开发调试

为了便于进行微信开发的调试,我们专门提供了一个快速模拟微信请求的脚本。以下是对上面发红包的模拟请求:

  1. $php ./Library/Wechat/Tests/send_wechat_text.php http://dev.wechat.com/weixin/ demo
  2. <xml>
  3. <ToUserName><![CDATA[oWNXvjipYqRViMpO8GZwXxE43pUY]]></ToUserName>
  4. <FromUserName><![CDATA[gh_43235ff1360f]]></FromUserName>
  5. <CreateTime>1423821388</CreateTime>
  6. <MsgType><![CDATA[news]]></MsgType>
  7. <ArticleCount>1</ArticleCount>
  8. <Articles>
  9. <item>
  10. <Title><![CDATA[让红包飞~]]></Title>
  11. <Description><![CDATA[您已领取到一个85元红包~]]></Description>
  12. <PicUrl><![CDATA[http://webtools.qiniudn.com/172906_61c8663a_121026.jpeg]]></PicUrl>
  13. <Url><![CDATA[http://git.oschina.net/dogstar/PhalApi-Library]]></Url>
  14. </item>
  15. </Articles>
  16. <FuncFlag>0</FuncFlag>
  17. </xml>

原文: https://www.phalapi.net/wikis/3-1.html