2017 © Pedro Peláez
 

library wechat

wechat sdk

image

hsinlu/wechat

wechat sdk

  • Wednesday, November 18, 2015
  • by hsinlu
  • Repository
  • 3 Watchers
  • 3 Stars
  • 31 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 3 Versions
  • 19 % Grown

The README.md

wechat, (*1)

wechat

开发的微信公众平台 SDK,旨在于提供简洁优雅的开发体验。, (*2)

暂不推荐于生产环境, (*3)

功能

以下是所支持的功能列表,根据微信官方文档分类、命名,其中打勾的为已完成功能,其他为开发中状态。, (*4)

  • [x] 微信接入
  • [x] 获取access_token
  • [x] 获取微信服务器IP地址
  • [x] 被动接收普通消息
  • [x] 被动接收事件消息
  • [x] 被动回复消息
  • [x] 客服消息(接口调用不成功)
  • [ ] 多客服功能(接口调用不成功)
  • [x] 群发消息
  • [x] 模板消息(未测试)
  • [x] 获取自动回复规则
  • [ ] 消息加解密
  • [x] 素材管理(添加永久素材,视频素材没实现)
  • [x] 用户管理
  • [x] 自定义菜单管理
  • [x] 二维码
  • [x] 长链接转短链接
  • [x] 数据统计
  • [x] 语义理解
  • [ ] JS-SDK
  • [ ] 微信小店
  • [ ] 微信卡券
  • [ ] 微信门店
  • [ ] 微信智能接口
  • [ ] 微信智能接口
  • [ ] 摇一摇周边
  • [ ] 微信连Wi-Fi

环境要求

PHP 版本 >=5.5.9, (*5)

注意事项

  1. 所有发往微信的json数据,如果包含中文,在使用json_encode时,需要设置JSON_UNESCAPED_UNICODE

json_encode(['group' => [ 'id' => $groupid, 'name' => '我的家人' ],], JSON_UNESCAPED_UNICODE);

安装

使用composer安装
composer require "hsinlu/wechat"

使用

配置

在实例化类时传入微信相关的配置。, (*6)

<?php

// 一下内容中的$app均是`Hsin\Wechat\Application`对象
$app = new Hsin\Wechat\Application([
  // 应用ID
    'app_id' => '应用ID',
    // 应用密钥
    'app_secret' => '应用密钥',
    // 令牌
    'token' => '令牌',
    // 消息是否加密 
    'encrypt' => false,
    // 消息加解密密钥
    'encoding_AES_key' => '消息加解密密钥',
]);

被动接收消息

被动接收普通消息

被动接收普通消息只需要绑定对应消息类别的处理程序,其中普通消息类别对应为:文本消息(text)、图片消息(image)、语音消息(voice)、视频消息(video)、小视频消息(shortvideo)、地理位置消息(location)、链接消息(link),下面代码以文本消息(text)为例:, (*7)

$app->on('text', function($message) {
    return 'Hello Wechat';
});

除了上面闭包形式的处理程序,您还可以设置单独的处理类,处理类需要包含 handle 方法。, (*8)

<?php

namespace App\Wechat\Handlers;

class TextHandler
{
    /**
     * 处理微信发来的文本消息
     *
     * @param  SimpleXMLElement  $message
     * @return void
     */
    public function handle($message)
    {
        // 处理逻辑
    }
}

被动接收事件消息

事件消息与普通消息的处理方式相同,唯一不同的是事件消息的处理程序的键值为消息类型+事件类型组成,其中事件消息的类型为event,事件类型包含以下几种:关注(subscribe)、取消关注(unsubscribe)、扫描带参数二维码事件(为关注时为subscribe,EventKey以qrscene_为前缀;已关注时为SCAN)、上报地理位置事件(LOCATION)、自定义菜单事件(CLICK)、点击菜单跳转链接时的事件(VIEW),下面以关注事件为例:, (*9)

$app->on('event.subscribe', function($message) {
    return '您已关注。';
});

与普通消息一样,除了闭包形式的处理程序外,您仍可以设置单独类作为处理程序,与普通消息一致,这里不再示例。, (*10)

回复消息的类型

回复消息的类型为微信预定义的几种消息格式,分别为:回复文本消息(text)、回复图片消息(image)、回复语音消息(voice)、回复视频消息(video)、回复音乐消息(music)、回复图文消息(news),当然,SDK中已经对此类的消息做了封装,无需手动生成响应的XML。, (*11)

Hsin\Wechat\Results\TextResult  // 对应文本消息
Hsin\Wechat\Results\ImageResult // 对应图片消息
Hsin\Wechat\Results\VoiceResult // 对应语音消息
Hsin\Wechat\Results\VideoResult // 对应视频消息
Hsin\Wechat\Results\MusicResult // 对应音乐消息
Hsin\Wechat\Results\NewsResult  // 对应图文消息

所有的消息结果类都继承抽象类Result,您也可以根据需要扩展消息的类型, (*12)

所有的消息结果类构造函数接收一个包含消息类所需要的数据数组,以下以回复文本消息为例:, (*13)


$app->on('text', function ($message) { return new TextResult([ 'fromUserName' => trim($message->ToUserName), 'toUserName' => trim($message->FromUserName), 'content' => '这是一条文本消息。', ]); });

调用微信接口

获取access token

getAccessToken(), (*14)

getAccessToken方法会优先从缓存中获取access token,缓存时间为100分钟,如果检测到缓存中不存在access token或者缓存过期,将会从微信服务器中重新获取。, (*15)

// 返回access token
$app->getAccessToken();

, (*16)

forgetAccessToken(), (*17)

该方法会移除缓存中的access token,下次获取access token将从微信服务器中重新获取。, (*18)

// 移除缓存中的access token
$app->forgetAccessToken();

获取微信服务器IP地址

getCallbackIP(), (*19)

getCallbackIP方法获取微信服务器IP地址列表。, (*20)

// 获取微信服务器IP地址列表
$app->getCallbackIP();

// {
//      "ip_list":["127.0.0.1","127.0.0.1"]
// }

客服消息

addKFAccount(), (*21)

addKFAccount方法用于添加客服账号。, (*22)

// 添加客服账号
// $account => 'test1@test'
// $nickname => '客服1'
// $password => 'pswmd5'
$app->addKFAccount($account, $nickname, $password);

// bool 是否添加成功


, (*23)

modifyKFAccount(), (*24)

modifyKFAccount方法用于修改客服账号, (*25)

// 修改客服账号
// $account => 'test1@test'
// $nickname => '客服1'
// $password => 'pswmd5'
$app->modifyKFAccount($account, $nickname, $password);

// bool 是否修改成功


, (*26)

deleteKFAccount(), (*27)

deleteKFAccount方法用于删除客服账号, (*28)

// 删除客服账号
// $account => 'test1@test'
// $nickname => '客服1'
// $password => 'pswmd5'
$app->deleteKFAccount($account, $nickname, $password);

// bool 是否删除成功


, (*29)

uploadKFAccountAvatar(), (*30)

uploadKFAccountAvatar方法用于设置客服账号的头像, (*31)

// 设置客服帐号的头像
// $account => 'test1@test'
// $avatar => '头像文件'
$app->uploadKFAccountAvatar($account, $avatar);

// bool 是否设置成功


, (*32)

getAllKFAccount(), (*33)

getAllKFAccount用于获取所有客服账号, (*34)

// 获取所有客服账号
// $account => 'test1@test'
// $avatar => '头像文件'
$app->getAllKFAccount();

/*
{
    "kf_list": [
        {
            "kf_account": "test1@test", 
            "kf_nick": "ntest1", 
            "kf_id": "1001"
            "kf_headimgurl": " http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjfUS8Ym0GSaLic0FD3vN0V8PILcibEGb2fPfEOmw/0"
        }, 
        {
            "kf_account": "test2@test", 
            "kf_nick": "ntest2", 
            "kf_id": "1002"
            "kf_headimgurl": " http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjfUS8Ym0GSaLic0FD3vN0V8PILcibEGb2fPfEOmw /0"
        }, 
        {
            "kf_account": "test3@test", 
            "kf_nick": "ntest3", 
            "kf_id": "1003"
            "kf_headimgurl": " http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjfUS8Ym0GSaLic0FD3vN0V8PILcibEGb2fPfEOmw /0"
        }
    ]
}
*/


, (*35)

sendKFMessage(), (*36)

sendKFMessage用于发送客服消息, (*37)

// 发送客服消息
/* $message => '{
            "touser":"OPENID",
            "msgtype":"text",
            "text":
            {
                "content":"Hello World"
            }
    }'

    $message可以为json字符串、json对象、数组,为对象或数组时会自动转化为json字符串。
*/
// 具体参见:http://mp.weixin.qq.com/wiki/1/70a29afed17f56d537c833f89be979c9.html
$app->sendKFMessage($message);

// bool 是否发送成功

群发消息

uploadNews(), (*38)

uploadNews方法用于上传图文消息素材, (*39)

/*
$articles = '{
   "articles": [
         {
          "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
          "author":"xxx",
              "title":"Happy Day",
              "content_source_url":"www.qq.com",
              "content":"content",
              "digest":"digest",
          "show_cover_pic":"1"
         },
         {
         "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
         "author":"xxx",
             "title":"Happy Day",
             "content_source_url":"www.qq.com",
             "content":"content",
             "digest":"digest",
         "show_cover_pic":"0"
         }
   ]
}'

$articles可以为json字符串、json对象、数组,为对象或数组时会自动转化为json字符串。
*/
$app->uploadNews($articles);

/*
{
   "type":"news",
   "media_id":"CsEf3ldqkAYJAU6EJeIkStVDSvffUJ54vqbThMgplD-VJXXof6ctX5fI6-aYyUiQ",
   "created_at":1391857799
}
*/


, (*40)

massSendByGroup(), (*41)

massSendByGroup方法用于给分组群发消息。, (*42)

/*
$message = '{
   "filter":{
      "is_to_all":false
      "group_id":"2"
   },
   "text":{
      "content":"CONTENT"
   },
    "msgtype":"text"
}'

$message可以为json字符串、json对象、数组,为对象或数组时会自动转化为json字符串。
*/
// 具体参见:http://mp.weixin.qq.com/wiki/15/5380a4e6f02f2ffdc7981a8ed7a40753.html

$app->massSendByGroup($message);

/*
{
   "errcode":0,
   "errmsg":"send job submission success",
   "msg_id":34182
}
*/

The Versions

18/11 2015

dev-master

9999999-dev

wechat sdk

  Sources   Download

MIT

The Requires

 

by Avatar hsinlu

wechat

12/11 2015

0.0.2

0.0.2.0

wechat sdk

  Sources   Download

MIT

The Requires

 

by Avatar hsinlu

wechat

02/11 2015

0.0.1

0.0.1.0

wechat sdk for laravel 5.1

  Sources   Download

MIT

The Requires

 

by Avatar hsinlu

laravel wechat