123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 |
- <?php
- namespace App\Http\Controllers\Wechat\GzhMsg;
- use App\Http\Controllers\Wechat\Template\TemplatesController;
- use App\Http\Controllers\Wechat\Staff\StaffsController;
- use App\Http\Controllers\Wechat\Material\MaterialsController;
- use App\Http\Controllers\Wechat\User\UserInfosController;
- use App\Http\Requests;
- use App\Http\Controllers\WechatController;
- use App\Modules\OfficialAccount\Services\ForceSubscribeDelayMsgService;
- use EasyWeChat\Message\Text;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Redis;
- use EasyWeChat\Foundation\Application;
- use App\Modules\OfficialAccount\Services\ForceSubscribeService;
- use App\Modules\WechatMaterial\Services\WechatMaterialSendMsgService;
- class GzhMsgsController extends WechatController
- {
- public $param;
- public $official_account;
- public function __construct()
- {
- v('gzh_msgs_construct');
-
- preg_match('/\/(.*)?\/callback/i',$_SERVER['REQUEST_URI'],$data);
- isset($data[1]) && !empty($data[1]) && $this->gzh_app_id=$data[1];
- v('$this->gzh_app_id');v($this->gzh_app_id);
-
-
- $redis_offcial_account_key = env('redis_offcial_account_key');
- if(!empty($redis_offcial_account_key)){
- $redis_offcial_account_key = $redis_offcial_account_key.$this->gzh_app_id;
- $official_account = Redis::hGet($redis_offcial_account_key,'official_account_info');
- $official_account = objectToArray(json_decode($official_account));
- if(empty($official_account)){
- v('construct_not_has_redis_official_account_return:'.$this->gzh_app_id);
- die('');
- }else{
- v('construct_has_redis_official_account:'.$this->gzh_app_id);
- }
- }
- v('construct_check_end:'.$this->gzh_app_id);
-
- parent::__construct($this->gzh_app_id);
- $this->Staff = new StaffsController($this->param);
- $this->Material = new MaterialsController($this->param);
- $this->UserInfo = new UserInfosController($this->param);
- }
-
-
- public function index(Request $request)
- {
- v('gzh_msg_index_start');
- if(!$this->checkSignature($request)){
- v('return_fail:');
- }else{
- v('return_success:');
- }
- v('start_setmessagehander:'.env('DEVELOP_MODE'));
-
- if(env('DEVELOP_MODE') == 'local'){
- v('local_test');
- $message = $this->get_fake_data();
- $res = $this->deal_callback($message);
- }else{
- v('start-server');
- $this->app->server->setMessageHandler(function ($message) {
- v('start_deal_callback');
- return $this->deal_callback($message);
- });
- }
-
- v('last_echo');
-
- $response = $this->app->server->serve();
-
- return $response;
-
- }
-
- function deal_callback($message){
-
- $wechat_callback_switch = Redis::get('wechat_callback_switch');
- if($wechat_callback_switch){
- v('wechat_callback_switch_direct_return:');
- return '';
- }
- try{
- v('gzh_start_setmessagehander_in');
-
- if($this->gzh_app_id == 'wx570bc396a51b8ff8'){
- v('deal_callback_wxtest_direct_return:'.$this->gzh_app_id);
- return '';
- }
-
- v($message);
- if(isset($this->official_account) && in_array($this->official_account['official_account_type'],array('third_platform_default_login','third_platform_pay'))){
- v('deal_callback_myown_direct_return:'.$this->gzh_app_id);
- return '';
- }
-
- $openid = isset($message->FromUserName)?$message->FromUserName:'';
- $this->param['openid'] = $openid;
- $distribution_channel_id = isset($this->official_account['distribution_channel_id'])?$this->official_account['distribution_channel_id']:'';
-
- if($message->Event == 'TEMPLATESENDJOBFINISH'){
- v('event_template_send_job_finish_return:'.$openid);
- return '';
- }
-
- $wx_user = $this->WechatApi->get_force_wx_user($this->gzh_app_id,$openid);
-
- try {
- ForceSubscribeService::updateGzhUserCustomActive(['openid' => $openid, 'appid' => $this->gzh_app_id, 'distribution_channel_id' => $distribution_channel_id, 'force_user' => $wx_user]);
- }catch (\Exception $e)
- {
-
- }
- switch ($message->MsgType) {
- case 'event':
-
- if($message->Event == 'subscribe'){
- v('subscribe:'.$openid);
-
-
- $material_force_subscribe_mapping = $this->WechatApi->get_material_force_subscribe_mapping($this->official_account['distribution_channel_id'],$openid);
- v('material_force_subscribe_mapping:'.json_encode($material_force_subscribe_mapping));
- if(isset($material_force_subscribe_mapping['uid']) && !empty($material_force_subscribe_mapping['uid'])){
- $message->EventKey = 'qrscene_'.$material_force_subscribe_mapping['uid'];
- v('material_force_subscribe_mapping_eventkey:'.$message->EventKey);
- }
-
-
- $force_subscribe_sceneId = '';
- if(!empty($message->EventKey) && strpos($message->EventKey,'qrscene_') === 0){
- $force_subscribe_sceneId = str_replace('qrscene_','',$message->EventKey);
- v('subscribe_openid:'.$openid.' force_subscribe_sceneId:'.$force_subscribe_sceneId);
- }
-
-
- if(!empty($wx_user)){
- v('exist:'.$openid);
- v('subscribe:'.$openid);
- $this->WechatApi->subscribe_wx_user($this->gzh_app_id,$openid);
- }
-
- else{
- v('not_exist:'.$openid);
-
-
- if(strpos($force_subscribe_sceneId,'outer') > -1){
- v('outer_subscribe:'.$openid.' sceneId:'.$force_subscribe_sceneId);
- }
-
- else{
- if(!empty($force_subscribe_sceneId)){
- v('not_exist_user_save_force_subscribe:'.$openid.' $force_subscribe_sceneId:'.$force_subscribe_sceneId);
- $data = $this->UserInfo->get_oauth_user_info($openid,$force_subscribe_sceneId);
-
- $this->WechatApi->save_force_wx_user($data);
- }
- }
-
- }
- ForceSubscribeDelayMsgService::queue($distribution_channel_id,$this->gzh_app_id,$openid);
- }
- elseif($message->Event == 'unsubscribe'){
- v('unsubscribe:'.$openid);
- $this->WechatApi->unsubscribe_wx_user($this->gzh_app_id,$openid);
- ForceSubscribeDelayMsgService::dequeue($openid);
- }
-
- elseif($message->Event == 'SCAN'){
- $force_subscribe_sceneId = $message->EventKey;
- v('event_scan:'.$openid.' force_subscribe_sceneId:'.$force_subscribe_sceneId);
- if(!empty($message->EventKey)){
-
- if(empty($wx_user)){
- v('scan_not_exist_user_save_force_subscribe');
- $data = $this->UserInfo->get_oauth_user_info($openid,$force_subscribe_sceneId);
-
- $this->WechatApi->save_force_wx_user($data);
- }
-
- else{
- $origin_uid = isset($wx_user['uid'])?$wx_user['uid']:'';
- v('scan_exist_user_update_uid:'.$openid.' scenid:'.$force_subscribe_sceneId.' origin_uid:'.$origin_uid);
- $this->WechatApi->update_force_wx_user($openid,$force_subscribe_sceneId);
- }
-
- }
- }
-
- elseif($message->Event == 'CLICK'){
- v('event_click:'.$openid);
- }
-
- elseif($message->Event == 'TEMPLATESENDJOBFINISH'){
- v('event_template_send_job_finish:'.$openid);
- return '';
- }
-
- elseif($message->Event == 'VIEW' || $message->Event == 'view'){
- v('event_view_direct_return:'.$openid);
- return '';
- }
-
- elseif($message->Event == 'MASSSENDJOBFINISH'){
- v('event_msg_job_finish:'.$openid);
- WechatMaterialSendMsgService::update_wechat_material_send_msg_info($message);
- return '';
- }
-
-
- $send_event_content = $this->WechatApi->get_event_content($message->Event,$message->EventKey,$this->gzh_app_id,$openid);
- v('$send_event_content');v($send_event_content);
- return $this->Staff->batch_send_wechat_content($openid,$send_event_content,'direct_return');
-
- return '';
- break;
- case 'text':
- try{
- if(!empty($message->Content)){
- if($message->Content == 't'){
- $send_event_content = array();
- $send_event_content['text'] = $openid;
- return $this->Staff->batch_send_wechat_content($openid,$send_event_content,'direct_return');
- }else{
-
- $send_event_content = $this->WechatApi->get_event_content($message->MsgType,$message->Content,$this->gzh_app_id,$openid);
- return $this->Staff->batch_send_wechat_content($openid,$send_event_content,'direct_return');
- }
- }
- }
- catch(\Exception $e){
- v('text_ept:'.$openid.' info:'.$e->getMessage());
- }
- return '';
- break;
- case 'image':
- $encode_distribution_channel_id = encodeDistributionChannelId($distribution_channel_id);
- $WECHAT_CUSTOM_HOST = env('WECHAT_CUSTOM_HOST');
- $feedback_content = '未找到相关小说,'."\n".'您可以试试:'."\n"."\n".'<a href="'.env('PROTOCOL').'://site'.$encode_distribution_channel_id.'.'.$WECHAT_CUSTOM_HOST.'.com/recent">查看阅读记录 >> </a> '."\n"."\n".'<a href="'.env('PROTOCOL').'://site'.$encode_distribution_channel_id.'.'.$WECHAT_CUSTOM_HOST.'.com">去书城首页看看 >> </a> '."\n"."\n".'点此<a href="https://help.wd.amanbook.com/?distribution_channel_id='.$encode_distribution_channel_id.'&down=1">联系客服</a>';
- $send_event_content = array();
- $send_event_content['text'] = $feedback_content;
- return $this->Staff->batch_send_wechat_content($openid,$send_event_content,'direct_return');
- return '';
- break;
- case 'voice':
- return '';
- break;
- case 'media':
- return '';
- break;
- case 'location':
- return '';
- break;
- case 'link':
- return '';
- break;
-
- default:
- return '';
- break;
- }
-
- return '';
- }
- catch(\Exception $e){
- v('deal_call_ept:'.$this->gzh_app_id.' info:'.$e->getMessage());
- }
- return '';
- }
-
-
- private function checkSignature($request)
- {
- v('checksign_start');v($request->all());
- $signature = $request->get('signature');
- $timestamp = $request->get('timestamp');
- $nonce = $request->get('nonce');
- $echostr = $request->get('echostr');
-
-
- $tmpArr = array($this->token, $timestamp, $nonce);
- sort($tmpArr, SORT_STRING);
- $tmpStr = implode( $tmpArr );
- $tmpStr = sha1( $tmpStr );
- v('tmpStr:'.$tmpStr.' signature:'.$signature);
-
- if( $tmpStr == $signature ){
- return true;
- }else{
- return false;
- }
- }
-
- function get_fake_data(){
- $message = new \stdClass();
- $test = 'daily_sign';
- $openid = 'oTsZb0cLT7kg3RnxGkfabuRapxMA';
- $openid = 'oAcqg1LRHNKN2jaEkJ5v56HOwPEQ';
- if($test == 'subscribe'){
- $message->ToUserName = 'gh_0fdfe1e4f56c';
- $message->FromUserName =$openid;
- $message->Event = 'subscribe';
- $message->EventKey= 'qrscene_outer:1564_752019';
- $message->MsgType = 'event';
- }elseif($test == 'unsubscribe'){
- $message->ToUserName = 'gh_0fdfe1e4f56c';
- $message->FromUserName = $openid;
- $message->Event = 'unsubscribe';
- $message->EventKey= 'unsubscribe';
- $message->MsgType = 'event';
- }elseif($test == 'recent_read'){
- $message->ToUserName = 'gh_0fdfe1e4f56c';
- $message->FromUserName = $openid;
- $message->EventKey= 'recent_read';
- $message->Event = 'click';
- $message->MsgType = 'event';
- }elseif($test == 'daily_sign'){
- $message->ToUserName = 'gh_0fdfe1e4f56c';
- $message->FromUserName = $openid;
- $message->EventKey= 'daily_sign';
- $message->Event = 'click';
- $message->MsgType = 'event';
- }elseif($test == 'contact_customer'){
- $message->FromUserName = $openid;
- $message->Event = 'CLICK';
- $message->MsgType = 'event';
- $message->EventKey= 'contact_customer';
-
- }elseif($test == 'text'){
- $message->FromUserName = $openid;
- $message->Event = 'text';
- $message->MsgType = 'text';
- $message->EventKey= 'text';
- $message->Content = '我123';
- }
-
- elseif($test == 'scan'){
- $message->FromUserName = $openid;
- $message->Event = 'SCAN';
- $message->MsgType = 'event';
- $message->EventKey= '6';
- }
-
- return $message;
- }
-
- }
|