yuyue8/tp-wechat

thinkphp使用w7corp/easywechat,实现wechat常用功能和接口

1.0.3 2024-03-04 09:02 UTC

This package is auto-updated.

Last update: 2024-05-04 09:19:10 UTC


README

安装

composer require yuyue8/tp-wechat

微信公众号

微信公众号配置

tp_wechat配置文件内修改wechat配置

微信公众号服务接口

在控制器中添加以下代码,并在公众号后台设置该接口

public function server(Yuyue8\TpWechat\interfaces\WechatInterface $wechat)
{
    ob_clean();
    
    return $wechat->server();
}

微信公众号内置功能

若使用内置的关注取消关注模版消息功能,需要创建相关数据表,创建语句如下:

CREATE TABLE `wechat_notice_record` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `msgid` char(19) NOT NULL DEFAULT '' COMMENT '微信端消息记录ID',
  `user_id` int(11) NOT NULL DEFAULT '0' COMMENT '收取人ID',
  `user_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '收取人类型',
  `openid` char(28) NOT NULL DEFAULT '',
  `mode` varchar(20) NOT NULL DEFAULT '' COMMENT '通知模式 wechat',
  `type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '通知类型',
  `status` tinyint(1) NOT NULL DEFAULT '4' COMMENT '发送状态 1-发送中 2-成功 3-失败 4-待发送 5-取消',
  `content` json NOT NULL COMMENT '消息内容',
  `error_message` varchar(10) NOT NULL DEFAULT '' COMMENT '错误消息',
  `receive_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '回执时间',
  `create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
  `update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '编辑时间',
  `delete_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '删除时间',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `msgid` (`msgid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信公众号-消息通知记录';

CREATE TABLE `wechat_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增列',
  `openid` char(28) NOT NULL DEFAULT '' COMMENT 'openid',
  `unionid` char(28) NOT NULL DEFAULT '' COMMENT '公众号绑定开放平台后,用户信息会有此字段信息',
  `subscribe` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1已关注,2取消关注',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_openid` (`openid`,`subscribe`) USING BTREE,
  KEY `idx_unionid` (`unionid`,`subscribe`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8mb4 COMMENT='微信公众号-用户信息';

然后运行Yuyue8\TpWechat\jobs\WechatNoticeSendJobs消息队列,对消息进行处理

模版消息发送

template配置文件设置模版消息相关配置,然后调用Yuyue8\TpWechat\services\WechatNoticeRecordServices类的sendTemplate方法,

将会保存消息记录到数据表,并进入Yuyue8\TpWechat\jobs\WechatNoticeSendJobs消息队列

自定义微信公众号相关功能

如需自定义微信公众号相关功能,只需以下步骤:

创建微信服务类,继承Yuyue8\TpWechat\service\WechatService类或者Yuyue8\TpWechat\interfaces\WechatInterface接口,并实现相关方法 在provider.php文件中绑定微信服务类到接口

例如: 创建的微信服务类为app\service\Wechat,在provider.php文件中添加

Yuyue8\TpWechat\interfaces\WechatInterface::class => app\service\Wechat::class,

后续所有操作将由app\service\Wechat类完成

微信支付

微信支付配置

tp_wechat配置文件内修改wechat_pay配置

微信支付服务接口

在控制器中添加以下代码,并在商户号后台设置该接口,以接受订单支付通知和退款通知

public function server(Yuyue8\TpWechat\interfaces\WechatPayInterface $pay)
{
    ob_clean();
    
    return $pay->server();
}

由于订单数据表没有规则,所以请自行实现订单支付通知和退款通知后续操作,具体步骤如下:

🚨🚨🚨 注意:推送信息不一定靠谱哈,请务必验证 建议是拿订单号调用微信支付查询接口,以查询到的订单状态为准

自定义微信支付相关功能

Yuyue8\TpWechat\service\WechatPayService类内置了下单退单等功能,直接调用即可

如需自定义支付相关功能,只需以下步骤:

创建微信支付服务类,继承Yuyue8\TpWechat\service\WechatPayService类或者Yuyue8\TpWechat\interfaces\WechatPayInterface接口,并实现相关方法 在provider.php文件中绑定微信支付服务类到接口

例如: 创建的微信支付服务类为app\service\PayWechat,在provider.php文件中添加

Yuyue8\TpWechat\interfaces\WechatPayInterface::class => app\service\PayWechat::class,

更新微信支付平台证书

Yuyue8\TpWechat\service\WechatPayService类中的updatePlatformCerts方法可以更新微信支付平台证书,请每个商户号每天执行一次

警告

考虑到效率和多商户的情况,Yuyue8\TpWechat\service\WechatService类和Yuyue8\TpWechat\service\WechatPayService类中使用了单例且属性值为数组,所以在修改了tp_wechat配置文件或更新平台证书后,一定要重启重置以下类,否则修改的配置和平台证书将不会生效

Yuyue8\TpWechat\service\WechatService类、Yuyue8\TpWechat\service\WechatPayService类和Yuyue8\TpWechat\interfaces\WechatPayInterface接口

例如:

app(WechatService::class, [], true);
app(WechatPayService::class, [], true);
app(WechatPayInterface::class, [], true);