123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- <?php
- namespace app\index\controller;
- use app\common\controller\Frontend;
- use app\common\model\WechatContext;
- use app\common\model\WechatResponse;
- use EasyWeChat\Message\Text;
- use EasyWeChat\Payment\Order;
- use fast\service\Wechat as WechatService;
- use fast\third\Application;
- use think\Config;
- use think\Log;
- class Wechat extends Frontend
- {
- public $app = null;
- public function _initialize()
- {
- parent::_initialize();
- $this->app = new Application(Config::getSecret('wechat')->toArray());
- }
-
- public function api()
- {
- $this->app->server->setMessageHandler(function ($message)
- {
- $content = configvalue('wechat');
-
- $wechat_config = [];
- foreach ($content['config'] as $k => $v)
- {
- $wechat_config[$v['id']] = $v['value'];
- }
- $WechatService = new WechatService;
- $WechatContext = new WechatContext;
- $WechatResponse = new WechatResponse;
- $openid = $message->FromUserName;
- $to_openid = $message->ToUserName;
- $event = $message->Event;
- $eventkey = $message->EventKey ? $message->EventKey : $message->Event;
- $unknownmessage = isset($wechat_config['default.unknown.message']) ? $wechat_config['default.unknown.message'] : "对找到对应指令!";
- switch ($message->MsgType)
- {
- case 'event':
- switch ($event)
- {
- case 'subscribe':
- return isset($wechat_config['default.subscribe.message']) ? $wechat_config['default.subscribe.message'] : "欢迎关注我们!";
- case 'unsubscribe':
- return '';
- case 'LOCATION':
- return '';
- case 'VIEW':
- return '';
- default:
- break;
- }
- $response = $WechatResponse->where(["eventkey" => $eventkey, 'status' => FA_STATUS_NORMAL])->get();
- if ($response)
- {
- $content = (array) json_decode($response['content'], TRUE);
- $context = $WechatContext->where(['openid' => $openid])->get();
- $data = ['eventkey' => $eventkey, 'command' => '', 'refreshtime' => time(), 'openid' => $openid];
- if ($context)
- {
- $WechatContext->data($data)->where('id', $context['id'])->update();
- $data['id'] = $context['id'];
- }
- else
- {
- $id = $WechatContext->data($data)->insert();
- $data['id'] = $id;
- }
- $result = $WechatService->response($this, $openid, $content, $data);
- if ($result)
- {
- return $result;
- }
- }
- return $unknownmessage;
- case 'text':
- case 'image':
- case 'voice':
- case 'video':
- case 'location':
- case 'link':
- default:
-
- $context = $WechatContext->where([['openid', $openid], ['refreshtime', '>=', time() - 1800]])->get();
- if ($context && $context['eventkey'])
- {
- $response = $WechatResponse->where(['eventkey' => $context['eventkey'], 'status' => FA_STATUS_NORMAL])->get();
- if ($response)
- {
- $WechatContext->data(array('refreshtime' => time()))->where('id', $context['id'])->update();
- $content = (array) json_decode($response['content'], TRUE);
- $result = $WechatService->command($this, $openid, $content, $context);
- if ($result)
- {
- return $result;
- }
- }
- }
-
- if ($message->MsgType == 'text')
- {
- $wechat_autoreply = new Orm('wechat_autoreply');
- $autoreply = $wechat_autoreply->where(['text' => $message->Content, 'status' => FA_STATUS_NORMAL])->get();
- if ($autoreply)
- {
- $response = $WechatResponse->where(["eventkey" => $autoreply['eventkey'], 'status' => FA_STATUS_NORMAL])->get();
- if ($response)
- {
- $content = (array) json_decode($response['content'], TRUE);
- $context = $WechatContext->where(['openid' => $openid])->get();
- $result = $WechatService->response($this, $openid, $content, $context);
- if ($result)
- {
- return $result;
- }
- }
- }
- }
- return $unknownmessage;
- }
- return "";
- });
- $response = $this->app->server->serve();
-
- $response->send();
- return FALSE;
- }
-
- public function callback()
- {
- }
-
- public function push()
- {
- $openid = $this->request->request("openid");
- $message = $this->request->request("message");
- if (!$openid || !$message)
- {
- $this->code = 1000;
- return;
- }
- $message = new Text(['content' => $message]);
- $result = $this->app->staff->message($message)->to($openid)->send();
- $this->code = 0;
- echo json_encode(['code' => $this->code]);
- return FALSE;
- }
-
- public function notify()
- {
- Log::record(file_get_contents('php://input'), "notify");
- $response = $this->app->payment->handleNotify(function($notify, $successful)
- {
-
- $orderinfo = Order::findByTransactionId($notify->transaction_id);
- if ($orderinfo)
- {
-
- return true;
- }
- $orderinfo = Order::get($notify->out_trade_no);
- if (!$orderinfo)
- {
- return 'Order not exist.';
- }
-
-
- if ($orderinfo['paytime'])
- {
- return true;
- }
-
- if ($successful)
- {
-
- Order::update(['paytime' => time(), 'paytype' => 'wechat', 'transaction_id' => $notify->transaction_id, 'status' => FA_STATUS_PAID], $orderinfo['id']);
- $userinfo = User::get($orderinfo['user_id']);
- if ($userinfo)
- {
- $data = [
- 'first' => '你好!' . $userinfo['nickname'] . ',我们已收到您的货款,开始为您印刷书本,请耐心等待: )',
- 'orderMoneySum' => $orderinfo['saleamount'],
- 'orderProductName' => $orderinfo['title'],
- 'Remark' => '如有问题请直接在微信留言,我们将第一时间为您服务!',
- ];
- notice($userinfo['id'], $data, url('order/info/' . $orderinfo['id'], 1), 'lABqvSfOD1nJ6mrVVY1vSBpKr8NpQf1MzqgdN0M_Ifo');
- }
- return true;
- }
- else
- {
- return true;
- }
- });
- $response->send();
- return FALSE;
- }
- }
|