lychee/message

Wechat message data object model

v0.1.4 2023-02-25 15:22 UTC

This package is auto-updated.

Last update: 2024-12-20 19:16:10 UTC


README

简介

Lychee\Message 是微信公众号消息模型类,它能解析和构建微信公众号消息数据,你可以使用它进行微信公众号被动消息的开发和调试。

安装

composer require lychee/message

简单使用

从 XML 数据载入

<?php
use Lychee\Message\Text;

$xml = "<xml><ToUserName><![CDATA[username]]></ToUserName><FromUserName><![CDATA[openid]]></FromUserName><CreateTime>1529939743</CreateTime><MsgType><![CDATA[text]]></MsgType><MsgId>201806252315439427</MsgId><Content><![CDATA[Hello world]]></Content></xml>";

$msg = new Text($xml);

var_dump($msg);
// object(Lychee\Message\Text)#2 (6) {
//   ["MsgType":protected]=>
//   string(4) "text"
//   ["ToUserName":protected]=>
//   string(8) "username"
//   ["FromUserName":protected]=>
//   string(6) "openid"
//   ["CreateTime":protected]=>
//   string(10) "1529939743"
//   ["MsgId":protected]=>
//   string(18) "201806252315439427"
//   ["properties":protected]=>
//   array(1) {
//    ["Content"]=>
//    string(11) "Hello world"
//   }
// }

如果你不知道 xml 中的 MsgType 是何值(例如你的程序接收到来自微信的数据时),可以使用 Auto 类来帮你加载和解析:

<?php
use Lychee\Message\Auto;

$xml = "<xml><ToUserName><![CDATA[username]]></ToUserName><FromUserName><![CDATA[openid]]></FromUserName><CreateTime>1529939743</CreateTime><MsgType><![CDATA[text]]></MsgType><MsgId>201806252315439427</MsgId><Content><![CDATA[Hello world]]></Content></xml>";

$msg = Auto::init($xml);

var_dump(get_class($msg));
// string(19) "Lychee\Message\Text"

构建新消息

<?php
use Lychee\Message\Text;

$msg = new Text;

// 然后可以通过 set 开头的方法设置属性:
$msg->setToUserName("username")
    ->setFromUserName("openid")
    ->setCreateTime(time())
    ->setMsgId(date("YmdHis" . mt_rand(1000,9999)))
    ->setContent("Hello world");

var_dump($msg->toXML());
// string(248) "<xml><ToUserName><![CDATA[username]]></ToUserName><FromUserName><![CDATA[openid]]></FromUserName><CreateTime>1529939797</CreateTime><MsgType><![CDATA[text]]></MsgType><MsgId>201806252316377977</MsgId><Content><![CDATA[Hello world]]></Content></xml>"

访问消息数据

访问消息数据时,可以像公开属性一样直接访问,属性名与 xml 结构中的标签一样,例如

echo $msg->ToUserName;
// username

echo $msg->Content;
// Hello world

生成 xml 字符串和数组

通过 toXML()toArray() 方法可以生成 xml 字符串或消息数组:

<?php
use Lychee\Message\Text;

$msg = new Text;
$msg->setToUserName("username")
    ->setFromUserName("openid")
    ->setCreateTime(time())
    ->setMsgId(date("YmdHis" . mt_rand(1000,9999)))
    ->setContent("Hello world");

var_dump($msg->toXML());
// string(248) "<xml><ToUserName><![CDATA[username]]></ToUserName><FromUserName><![CDATA[openid]]></FromUserName><CreateTime>1529941287</CreateTime><MsgType><![CDATA[text]]></MsgType><MsgId>201806252341275858</MsgId><Content><![CDATA[Hello world]]></Content></xml>"

var_dump($msg->toArray());
// array(6) {
//   ["MsgType"]=>
//   string(4) "text"
//   ["FromUserName"]=>
//   string(6) "openid"
//   ["ToUserName"]=>
//   string(8) "username"
//   ["CreateTime"]=>
//   int(1529941287)
//   ["MsgId"]=>
//   int(201806252341275858)
//   ["Content"]=>
//   string(11) "Hello world"
// }