博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php getticket,easyWechat 处理ticket以及事件推送
阅读量:5106 次
发布时间:2019-06-13

本文共 2821 字,大约阅读时间需要 9 分钟。

现在的小程序电商系统一般都会用到第三方开放平台,因为这样可以方便管理小程序,还有一个品牌的标志

当然第三方平台需要开发的代码量也是可观的,这里我个人推荐使用PHP的微信开发SDK EasyWeChat,这个SDK虽然文档写的不完整,但是它的功能基本覆盖了所有微信开发的供能

其中,我用搭建第三方平台的时候遇到的两个处理ticket的url问题

官方文档会有两个接收事件的地址

1 授权事件接收URL

用于接收取消授权通知、授权成功通知、授权更新通知,也用于接收ticket,ticket是验证平台方的重要凭据。

2 消息与事件接收URL

通过该URL接收公众号或小程序消息和事件推送,该参数按规则填写(需包含/$APPID$,如www.abc.com/$APPID$/callback),实际接收消息时$APPID$将被替换为公众号或小程序AppId。

使用easywechat的时候这两个地址可以调用同一个消息处理事件,然后分别做返回success的处理,当然也可以把两个接收事件地址写成一样,统一处理。

授权通知的代码如下

/**

* 授权接收

* @return string

*/

public function ticket()

{

(new TicketEvent())->event(); //统一处理的事件

return 'success';

}

消息推送的代码如下

/**

* 事件推送

*

* @return void

*/

public function ticket()

{

(new TicketEvent())->event(); //统一处理的事件

return 'success';

}

咋一看其实是一样的

以下是统一处理事件的类

class TicketEvent

{

public function event()

{

$server = OpenApp::getApp()->server;

$message = $server->getMessage();

///授权成功事件

if (isset($message['InfoType'])&&$message['InfoType'] == 'authorized') {

// TODO

}

//授权更新事件

if (isset($message['InfoType'])&&$message['InfoType'] == 'updateauthorized') {

// TODO

}

//授权取消事件

if (isset($message['InfoType'])&&$message['InfoType'] == 'unauthorized') {

(new AuthLogic())->authEvent($message);

}

//快速注册小程序事件

if(isset($message['InfoType'])&&$message['InfoType'] == 'notify_third_fasteregister'){

(new ComponentLogic())->registerNoteEvent($message);

}

//代码审核推送

if (isset($message['MsgType'])&&$message['MsgType'] == 'event') {

$appid = ltrim(request()->param('appid'), '/');

//审核通过

if (isset($message['Event'])&&$message['Event'] == 'weapp_audit_success') {

(new CodeLogic())->codeEvent($appid);

}

//审核不通过

if (isset($message['Event'])&&$message['Event'] == 'weapp_audit_fail') {

$reason = $message['Reason'] ? $message['Reason'] : '未知原因';

(new CodeLogic())->codeEvent($appid, $reason);

}

}

// 其他事件另行开发,目前就只有这几个

return $server->serve();

}

}

OpenApp::getApp() 是我写的一个获取对象的单例,获取配置的暂时还没有用到

Class OpenApp

{

protected static $_instance;

private function __construct()

{

}

public static function getApp($agent_id = false, $open_app_id = false)

{

if (is_null(self::$_instance)) {

$config = self::getConfig($agent_id, $open_app_id);

self::$_instance = Factory::openPlatform($config);

}

return self::$_instance;

}

protected static function getConfig($agent_id = false, $open_app_id = false)

{

$where = [];

if ($agent_id) {

$where['agent_id'] = $agent_id;

}

if ($open_app_id) {

$where['open_app_id'] = $open_app_id;

}

$agent = (new Agent())->where($where)->find();

$defaultConfig = [

'app_id' => 'appid',

'secret' => 'secret',

'token' => 'token',

'aes_key' => 'aes_key'

];

if (!$agent) {

$config = $defaultConfig;

} else {

if ($agent['is_open'] == 1) {

$config = [

'app_id' => $agent['open_app_id'],

'secret' => $agent['open_secret'],

'token' => $agent['open_token'],

'aes_key' => $agent['open_aes_key']

];

} else {

$config = $defaultConfig;

}

}

return $config;

}

}

转载地址:http://uhudv.baihongyu.com/

你可能感兴趣的文章
js获取ip地址,操作系统,浏览器版本等信息,可兼容
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
Cadence Allegro 如何关闭铺铜(覆铜)shape的显示和设置shape显示模式–allegro小技巧...
查看>>
Atcoder Grand Contest 004 题解
查看>>
MFC中 给对话框添加背景图片
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
idea 系列破解
查看>>
Repeater + Resources 列表 [原创][分享]
查看>>
c# Resolve SQlite Concurrency Exception Problem (Using Read-Write Lock)
查看>>
dependency injection
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
C#综合揭秘——细说多线程(下)
查看>>
c#运算符 ?
查看>>
ps互补色
查看>>
Silverlight学习笔记(九)-----RenderTransform特效【五种基本变换】及【矩阵变换MatrixTransform】...
查看>>
【题解】青蛙的约会
查看>>
【eclipse】点Clean后没反应
查看>>
springboot下html的js中使用shiro标签功能
查看>>
求给定字符串的最长子字符串
查看>>
.26-浅析webpack源码之事件流make(1)
查看>>