This commit is contained in:
aozhiwei 2019-01-14 20:15:33 +08:00
parent de6a67c910
commit ba51b6b8d0
2 changed files with 91 additions and 72 deletions

View File

@ -0,0 +1,8 @@
<?php
//微信App_ID已及APP_Secret
const WEIXIN_APP_ID = 'wxfa9c8ea6a55f00d0';
const WEIXIN_APP_SECRET = '999712592d00ad2f75b04421e030ba04';
const WEIXIN_API_URL = 'https://api.weixin.qq.com/sns/jscode2session';
const WEIXIN_MSG_KEY = 'MzebhFcmcIFT85xOr5TnrDVeLx5HMbpgAl5gw2PVvhX';
const WEIXIN_TOKEN = 'kingsome';

View File

@ -1,16 +1,12 @@
<?php <?php
define("TOKEN", "kingsome");
define("MSG_KEY", 'MzebhFcmcIFT85xOr5TnrDVeLx5HMbpgAl5gw2PVvhX');
define("SHAOWEI_APPID", 'wxfa9c8ea6a55f00d0');
define("PRIVATE_KEY", '999712592d00ad2f75b04421e030ba04');
class KefuController { class KefuController {
protected function getRedis($openid) protected function getRedis($openid)
{ {
$redis_conf = getRedisConfig(crc32($openid)); $redis_conf = getRedisConfig(crc32($openid));
$r = new phpcommon\Redis(array( $r = new phpcommon\Redis(array(
'host' => $redis_conf['host'], 'host' => $redis_conf['host'],
@ -22,21 +18,27 @@ class KefuController {
public function checkServer() // 校验服务器地址URL public function checkServer() // 校验服务器地址URL
{ {
$gameid = $_REQUEST['gameid'];
error_log($gameid);
$config_name = "../config/game$gameid/weixin/config.php";
require $config_name;
if ( isset($_REQUEST['echostr'])) { if ( isset($_REQUEST['echostr'])) {
$this->valid(); $this->valid();
} else { } else {
$this->responseMsg(); $this->responseMsg();
} }
} }
public function valid() public function valid()
{ {
$echoStr = $_REQUEST['echostr']; $echoStr = $_REQUEST['echostr'];
if ( $this->checkSignature()){ if ($this->checkSignature()) {
echo $echoStr; echo $echoStr;
exit; exit;
} else { } else {
echo $echoStr . '+++' . TOKEN; echo $echoStr . '+++' . WEIXIN_TOKEN;
exit; exit;
} }
} }
@ -48,14 +50,11 @@ class KefuController {
$timestamp = $_REQUEST["timestamp"]; $timestamp = $_REQUEST["timestamp"];
$nonce = $_REQUEST["nonce"]; $nonce = $_REQUEST["nonce"];
$token = TOKEN; $token = WEIXIN_TOKEN;
error_log('token:' . $token);
$tmpArr = array ( $token , $timestamp , $nonce ); $tmpArr = array ( $token , $timestamp , $nonce );
sort( $tmpArr , SORT_STRING); sort( $tmpArr , SORT_STRING);
$tmpStr = implode( $tmpArr ); $tmpStr = implode( $tmpArr );
$tmpStr = sha1($tmpStr); $tmpStr = sha1($tmpStr);
error_log('tmpStr:' . $tmpStr);
error_log('signature:' . $signature);
if ( $tmpStr == $signature ){ if ( $tmpStr == $signature ){
return true ; return true ;
@ -64,7 +63,7 @@ class KefuController {
} }
} }
private function disposeText($postArr) private function disposeText($postArr, $gameid)
{ {
$openid = $postArr['FromUserName']; $openid = $postArr['FromUserName'];
$toUserName = $postArr['ToUserName']; $toUserName = $postArr['ToUserName'];
@ -73,71 +72,73 @@ class KefuController {
} }
private function_exists($postArr) private function disposeImage($postArr, $gameid)
{ {
$openid = $postArr['FromUserName']; $openid = $postArr['FromUserName'];
$toUserName = $postArr['ToUserName']; $toUserName = $postArr['ToUserName'];
$CreateTime = $postArr['CreateTime']; $CreateTime = $postArr['CreateTime'];
}
private function disposeEvent($postArr, $gameid)
{
$openid = $postArr['FromUserName'];
$toUserName = $postArr['ToUserName'];
$CreateTime = $postArr['CreateTime'];
if($postArr['Event'] == 'user_enter_tempsession')
{
$content = '您好,有什么能帮助你?' ;
$data = array (
"touser"=> $openid,
"msgtype"=>"text",
"text"=> array ("content" => $content)
);
$postarray = json_encode( $data ,JSON_UNESCAPED_UNICODE);
//POST发送https请求客服接口api
$access_token = $this->getAccessToken($openid, $gameid);
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=$access_token";
$response = '';
if (!phpcommon\HttpClient::post($url, $postarray, $response)) {
phpcommon\sendError(ERR_RETRY, '系统繁忙');
return;
}
$ret_info = json_decode($response, true);
if ($ret_info['errcode'] == 0) {
echo(json_encode(array(
'errcode' => 0,
'errmsg' => ''
)));
exit ;
} else {
phpcommon\sendError(ERR_RETRY, 'token失败');
error_log($response);
}
}
} }
public function responseMsg() public function responseMsg()
{ {
$postStr = $GLOBALS ["HTTP_RAW_POST_DATA" ]; $postStr = $GLOBALS ["HTTP_RAW_POST_DATA" ];
error_log('responseMsg'); error_log($postStr);
if (!empty( $postStr ) && is_string( $postStr )){
if (! empty( $postStr ) && is_string( $postStr )){
$postArr = json_decode( $postStr , true ); $postArr = json_decode( $postStr , true );
if (! empty ( $postArr ['MsgType']) && $postArr ['MsgType'] == 'text'){ // 文本消息 if (!empty( $postArr ['MsgType']) && $postArr['MsgType'] == 'text'){ // 文本消息
$fromUsername = $postArr ['FromUserName']; // 发送者openid
$toUserName = $postArr ['ToUserName']; // 小程序id
$textTpl = array (
"ToUserName" =>$fromUsername ,
"FromUserName"=> $toUserName ,
"CreateTime"=> time (),
"MsgType"=>"transfer_customer_service",
);
exit (json_encode( $textTpl ));
} elseif (! empty ( $postArr ['MsgType']) && $postArr ['MsgType'] == 'image'){ // 图文消息
$fromUsername = $postArr ['FromUserName']; // 发送者openid
$toUserName = $postArr ['ToUserName']; // 小程序id
$textTpl = array (
"ToUserName"=> $fromUsername ,
"FromUserName"=> $toUserName ,
"CreateTime"=> time (),
"MsgType"=>"transfer_customer_service",
);
exit (json_encode( $textTpl ));
} elseif ( $postArr ['MsgType'] == 'event' && $postArr ['Event']=='user_enter_tempsession'){ // 进入客服动作
$fromUsername = $postArr ['FromUserName']; // 发送者openid
$content = '您好,有什么能帮助你?' ;
$data = array (
"touser"=> $fromUsername ,
"msgtype"=>"text",
"text"=> array ("content"=> $content )
);
$params = json_encode( $data ,JSON_UNESCAPED_UNICODE);
$access_token = $this->getAccessToken(); $this->disposeText($postArr, $gameid);
/*
* POST发送https请求客服接口api
*/
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $access_token; } elseif (!empty( $postArr ['MsgType']) && $postArr['MsgType'] == 'image'){ // 图文消息
$response = ''; $this->disposeImage($postArr, $gameid);
if (!phpcommon\HttpClient::get($url, $params, $response)) {
phpcommon\sendError(ERR_RETRY, '系统繁忙');
return;
}
if ( $response == 0 ){ } elseif (!empty( $postArr ['MsgType']) && $postArr['MsgType'] == 'event' ){ // 进入客服动作
echo 'success'; exit ; $this->disposeEvent($postArr, $gameid);
}
} else { } else {
exit ('aaa' ); exit ('aaa');
} }
} else { } else {
echo "" ; echo "" ;
@ -145,28 +146,38 @@ class KefuController {
} }
} }
public function getAccessToken($openid, $gameid)
{
public function getAccessToken(){ $r = $this->getRedis($openid);
if (S('access_token' )){ $access_token = $r->get('weixin_token:' . $gameid . ':' . $openid);
return S('access_token' ); if (!empty($access_token)) {
return $access_token;
} }
else { else {
$appid = SHAOWEI_APPID;
$appkey = PRIVATE_KEY; $appid = WEIXIN_APP_ID;
$url = "https://api.weixing.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appkey"; $appkey = WEICIN_APP_SECRET;
$url = "https://api.weixin.qq.com/cgi-bin/token?" .
"grant_type=client_credential&appid=$appid&secret=$appkey";
$params = array();
$response = ''; $response = '';
if (!phpcommon\HttpClient::get($url, $params, $response)) { if (!phpcommon\HttpClient::get($url, $params, $response)) {
phpcommon\sendError(ERR_RETRY, '系统繁忙'); phpcommon\sendError(ERR_INTERNAL, '系统繁忙');
return; return;
} }
$res = json_decode($response, true);
$res = json_decode($response, true ); if ( $res ) {
if ( $res ){ $r->set('weixin_token:' . $gameid . ':' .
S( 'access_token', $res ['access_token'],7100 ); $openid, $res['access_token']); //刚获取的token放到redis中
return S('access_token' ); $r->pexpire('weixin_token:' . $openid, 7150); //微信限制过期时间为两小时
return $res['access_token'];
} else { } else {
return 'api return error' ; phpcommon\sendError(ERR_INTERNAL, '获取access_token失败');
die;
} }
} }
} }