You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
4.5 KiB
115 lines
4.5 KiB
<?php
|
|
declare (strict_types=1);
|
|
|
|
namespace app\api\controller;
|
|
|
|
use app\common\model\WxserverAccount;
|
|
use cores\BaseController;
|
|
use think\db\exception\DataNotFoundException;
|
|
use think\db\exception\DbException;
|
|
use think\db\exception\ModelNotFoundException;
|
|
use think\facade\Db;
|
|
|
|
class Wxserver extends BaseController
|
|
{
|
|
|
|
public function index()
|
|
{
|
|
$appid = 'wx74c7a92ae5ffbcb6';
|
|
$template_id = 6;
|
|
$obj = new \app\common\library\wxserver\Server();
|
|
$arr = $obj->commit($appid, $template_id);
|
|
return $this->renderSuccess(['arr' => $arr]);
|
|
|
|
}
|
|
|
|
public function verifyTicket()
|
|
{
|
|
$xmlData = file_get_contents("php://input");
|
|
$obj = new \app\common\library\wxserver\Server();
|
|
$obj->getVerifyTicket($xmlData);
|
|
echo 'success';
|
|
}
|
|
|
|
/**
|
|
* @notes:授权回调
|
|
* @throws DataNotFoundException
|
|
* @throws DbException
|
|
* @throws ModelNotFoundException
|
|
* @author: wanghousheng
|
|
*/
|
|
public function redirect()
|
|
{
|
|
$authorization_code = $this->request->get('auth_code');
|
|
if ($authorization_code) {
|
|
$obj = new \app\common\library\wxserver\Server();
|
|
$obj->authorizationInfo($authorization_code, $this->request->domain(true));
|
|
}
|
|
echo 'success';
|
|
}
|
|
|
|
public function callback($appid)
|
|
{
|
|
$time = date('Y-m-d H:i:s');
|
|
Db::table('yoshop_wx_server')->insertGetId(['content' => '推送开始', 'created_at' => $time]);
|
|
$obj = new \app\common\library\wxserver\Server();
|
|
$signature = $this->request->get('signature');
|
|
$timestamp = $this->request->get('timestamp');
|
|
$nonce = $this->request->get('nonce');
|
|
if ($signature && $timestamp && $nonce) {
|
|
if ($obj->checkSignature($signature, $timestamp, $nonce)) {
|
|
$xmlData = file_get_contents("php://input");
|
|
if ($xmlData) {
|
|
Db::table('yoshop_wx_server')->insertGetId(['content' => $xmlData, 'created_at' => $time]);
|
|
$data = $obj->decryptXml($xmlData);
|
|
Db::table('yoshop_wx_server')->insertGetId(['content' => json_encode($data), 'created_at' => $time]);
|
|
if (!empty($data['MsgType'])) {
|
|
if ($data['MsgType'] == 'event' && !empty($data['Event'])) {
|
|
$up = [];
|
|
if ($data['Event'] == 'weapp_audit_success') {
|
|
$up['audit_status'] = 2;
|
|
} elseif ($data['Event'] == 'weapp_audit_fail') {
|
|
$up['audit_status'] = 3;
|
|
} elseif ($data['Event'] == 'weapp_audit_delay') {
|
|
$up['audit_status'] = 4;
|
|
}
|
|
if (!empty($data['Reason'])) {
|
|
$up['audit_reason'] = $data['Reason'];
|
|
}
|
|
if ($up && $appid) {
|
|
$model = new WxserverAccount();
|
|
$model->update($up, ['appid' => $appid]);
|
|
}
|
|
echo 'success';
|
|
} elseif ($data['MsgType'] == 'text' && !empty($data['Content'])) {
|
|
if ($data['Content'] == 'TESTCOMPONENT_MSG_TYPE_TEXT') {
|
|
$data['Content'] = 'TESTCOMPONENT_MSG_TYPE_TEXT_callback';
|
|
echo $this->responseText($data);
|
|
} elseif (strpos($data['Content'], 'QUERY_AUTH_CODE:') !== false) {
|
|
$query_auth_code = trim(str_replace("QUERY_AUTH_CODE:", "", $data['Content']));
|
|
$obj->apiText($query_auth_code, $data['FromUserName']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private function responseText($data): string
|
|
{
|
|
$template = "<xml>
|
|
<ToUserName><![CDATA[%s]]></ToUserName>
|
|
<FromUserName><![CDATA[%s]]></FromUserName>
|
|
<CreateTime>%s</CreateTime>
|
|
<MsgType><![CDATA[%s]]></MsgType>
|
|
<Content><![CDATA[%s]]></Content>
|
|
</xml>";
|
|
$fromUser = $data['ToUserName'];
|
|
$toUser = $data['FromUserName'];
|
|
$content = $data['Content'];
|
|
$time = time();
|
|
$msgType = 'text';
|
|
return sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
|
|
}
|
|
} |