新增im回调
This commit is contained in:
@@ -21,7 +21,10 @@ use Hyperf\Amqp\Producer;
|
||||
use Hyperf\DbConnection\Db;
|
||||
use Hyperf\HttpMessage\Stream\SwooleFileStream;
|
||||
use Hyperf\HttpMessage\Stream\SwooleStream;
|
||||
use Hyperf\Redis\Redis;
|
||||
use Hyperf\Utils\ApplicationContext;
|
||||
use Psr\Container\ContainerExceptionInterface;
|
||||
use Psr\Container\NotFoundExceptionInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
class CallBackController extends AbstractController
|
||||
@@ -111,6 +114,9 @@ class CallBackController extends AbstractController
|
||||
return $this->wxPayErrorReturn($e->getMessage());
|
||||
}
|
||||
|
||||
Log::getInstance()->info("微信支付回调处理成功");
|
||||
Log::getInstance()->info("微信支付回调处理成功,开始发送系统问诊消息");
|
||||
|
||||
try {
|
||||
if ($message['trade_state'] == "SUCCESS"){
|
||||
if ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4){
|
||||
@@ -178,9 +184,18 @@ class CallBackController extends AbstractController
|
||||
return $server->serve();
|
||||
}
|
||||
|
||||
Log::getInstance()->info("微信支付回调处理成功,发送系统问诊消息成功");
|
||||
|
||||
return $server->serve();
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信退款回调
|
||||
* @return ResponseInterface
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
* @throws \Throwable
|
||||
*/
|
||||
public function wxPayRefundCallBack(): ResponseInterface
|
||||
{
|
||||
try {
|
||||
@@ -200,7 +215,7 @@ class CallBackController extends AbstractController
|
||||
|
||||
Log::getInstance()->info("微信退款回调数据:" . json_encode($message->toArray(),JSON_UNESCAPED_UNICODE));
|
||||
return $server->serve();
|
||||
}catch (\Exception $e) {
|
||||
} catch (\Exception $e) {
|
||||
// 验证失败
|
||||
Db::rollBack();
|
||||
Log::getInstance()->error("微信支付回调数据验证失败:" . $e->getMessage());
|
||||
@@ -225,10 +240,195 @@ class CallBackController extends AbstractController
|
||||
)
|
||||
);
|
||||
}
|
||||
// im回调
|
||||
public function imCallBack(){
|
||||
|
||||
//
|
||||
|
||||
/**
|
||||
* im回调
|
||||
* @return ResponseInterface
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
public function imCallBack(): ResponseInterface
|
||||
{
|
||||
$request_params = $this->request->all();
|
||||
dump($request_params);
|
||||
Log::getInstance()->info(json_encode($request_params,JSON_UNESCAPED_UNICODE));
|
||||
try {
|
||||
Log::getInstance()->info("Im回调数据:" . json_encode($request_params,JSON_UNESCAPED_UNICODE));
|
||||
|
||||
if (empty($request_params['RequestTime']) || empty($request_params['Sign'])){
|
||||
Log::getInstance()->error("Im回调数据处理失败:缺少时间时间戳/签名字段");
|
||||
return $this->ImErrorReturn("缺少时间时间戳/签名字段");
|
||||
}
|
||||
|
||||
// 鉴定回调签名
|
||||
$imService = new ImService();
|
||||
$result = $imService->validateSign($request_params['RequestTime'],$request_params['Sign']);
|
||||
if (!$result){
|
||||
Log::getInstance()->error("Im回调数据处理失败:回调签名不匹配");
|
||||
return $this->ImErrorReturn("回调签名不匹配");
|
||||
}
|
||||
|
||||
// 验证消息内容
|
||||
if (empty($request_params['MsgBody'])){
|
||||
Log::getInstance()->error("Im回调数据处理失败:消息内容错误");
|
||||
return $this->ImErrorReturn("消息内容错误,缺少MsgBody");
|
||||
}
|
||||
|
||||
// 验证接收方user_id
|
||||
if (empty($request_params['To_Account'])){
|
||||
Log::getInstance()->error("Im回调数据处理失败:接收用户错误");
|
||||
return $this->ImErrorReturn("消息内容错误,接收用户错误");
|
||||
}
|
||||
|
||||
// 验证消息唯一id
|
||||
if (empty($request_params['MsgKey'])){
|
||||
Log::getInstance()->error("Im回调数据处理失败:消息唯一标识错误");
|
||||
return $this->ImErrorReturn("消息内容错误,消息唯一标识错误");
|
||||
}
|
||||
|
||||
// 验证消息重复性
|
||||
$params = array();
|
||||
$params['message_key'] = $request_params['MsgKey'];
|
||||
$message = \App\Model\Message::getExists($params);
|
||||
if ($message){
|
||||
// 消息重复
|
||||
Log::getInstance()->info("Im回调数据处理失败:消息重复");
|
||||
return $this->ImSuccessReturn();
|
||||
}
|
||||
|
||||
// 处理发送结果
|
||||
if ($request_params['message_send_result'] == 0){
|
||||
// im中0表示成功
|
||||
$message_send_result = 1;
|
||||
}
|
||||
|
||||
// 验证自定义消息内容
|
||||
$is_system = 0;// 是否系统操作发送(0:否 1:是)
|
||||
if (!empty($request_params['CloudCustomData'])){
|
||||
$cloud_custom_data = json_decode($request_params['CloudCustomData'],true);
|
||||
|
||||
if (!empty($cloud_custom_data['order_inquiry_id'])){
|
||||
// 获取订单数据
|
||||
$params = array();
|
||||
$params['order_inquiry_id'] = $cloud_custom_data['order_inquiry_id'];
|
||||
$order_inquiry = OrderInquiry::getOne($params);
|
||||
if (empty($order_inquiry)){
|
||||
Log::getInstance()->error("Im回调数据处理失败:非法订单");
|
||||
return $this->ImErrorReturn("消息内容错误,非法订单");
|
||||
}
|
||||
|
||||
$order_inquiry_id = $cloud_custom_data['order_inquiry_id'];
|
||||
}
|
||||
|
||||
if (!empty($cloud_custom_data['is_system'])){
|
||||
if ($cloud_custom_data['is_system'] == 1){
|
||||
// 系统发送
|
||||
$is_system = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 入库
|
||||
$data = array();
|
||||
if (!empty($request_params['From_Account'])){
|
||||
// 系统发送时不带参数
|
||||
$data['from_user_id'] = $request_params['From_Account'];
|
||||
}
|
||||
$data['to_user_id'] = $request_params['To_Account'];
|
||||
$data['message_key'] = $request_params['MsgKey'];
|
||||
$data['message_send_time'] = $request_params['RequestTime'];
|
||||
$data['message_seq'] = $request_params['MsgSeq'];
|
||||
$data['message_send_result'] = $message_send_result ?? 0;
|
||||
$data['send_error_info'] = $request_params['ErrorInfo'];
|
||||
$data['message_type'] = $request_params['MsgBody'][0]['MsgType'] ?? "未定义";
|
||||
|
||||
$data['is_system'] = $is_system;
|
||||
if (!empty($order_inquiry_id)){
|
||||
$data['order_inquiry_id'] = $order_inquiry_id;
|
||||
}
|
||||
|
||||
$message_content = $request_params['MsgBody'][0]['MsgContent'] ?? "";
|
||||
$data['message_content'] = json_encode($message_content,JSON_UNESCAPED_UNICODE);
|
||||
$data['message_custom_content'] = $request_params['CloudCustomData'] ?? "";
|
||||
$message = \App\Model\Message::addMessage($data);
|
||||
if (empty($message)){
|
||||
Log::getInstance()->error("Im回调数据处理失败:存储数据库失败");
|
||||
return $this->wxPayErrorReturn("存储数据库失败");
|
||||
}
|
||||
|
||||
// 存储redisList
|
||||
if (!empty($order_inquiry) && !empty($request_params['CloudCustomData'])){
|
||||
if (!empty($cloud_custom_data['is_system'])){
|
||||
if ($cloud_custom_data['is_system'] != 1){
|
||||
// 非系统发送
|
||||
if (!empty($cloud_custom_data['sender_user_type'])){
|
||||
if ($cloud_custom_data['sender_user_type'] == 1 || $cloud_custom_data['sender_user_type'] == 2){
|
||||
// 患者-医生发送
|
||||
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||
$data['patient_name'] = $order_inquiry['patient_name'];
|
||||
$data['patient_sex'] = $order_inquiry['patient_sex'];
|
||||
$data['patient_age'] = $order_inquiry['patient_age'];
|
||||
$data['inquiry_status'] = $order_inquiry['inquiry_status'];
|
||||
$data['message_send_time'] = $request_params['RequestTime'];
|
||||
$data['last_message_content'] = $request_params['MsgBody'][0]['MsgContent'] ?? "";
|
||||
|
||||
$imService = new ImService();
|
||||
$imService->addRecentContactRecordCache($order_inquiry['doctor_id'],$order_inquiry['inquiry_type'],$order_inquiry['user_id'],$data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
// 验证失败
|
||||
Log::getInstance()->error("Im回调数据处理失败:" . $e->getMessage());
|
||||
return $this->wxPayErrorReturn($e->getMessage());
|
||||
}
|
||||
|
||||
Log::getInstance()->info("Im回调数据处理成功");
|
||||
return $this->ImSuccessReturn();
|
||||
}
|
||||
|
||||
/**
|
||||
* im返回错误响应
|
||||
* @param string $message
|
||||
* @return ResponseInterface
|
||||
*/
|
||||
protected function ImErrorReturn(string $message): ResponseInterface
|
||||
{
|
||||
return $this->response
|
||||
->withStatus(200)
|
||||
->withBody(
|
||||
new SwooleStream(
|
||||
strval(
|
||||
json_encode([
|
||||
'ActionStatus' => 'FAIL',
|
||||
'ErrorCode' => 1,
|
||||
'ErrorInfo' => $message,
|
||||
], JSON_UNESCAPED_UNICODE)
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* im返回正确响应
|
||||
* @return ResponseInterface
|
||||
*/
|
||||
protected function ImSuccessReturn(): ResponseInterface
|
||||
{
|
||||
return $this->response
|
||||
->withStatus(200)
|
||||
->withBody(
|
||||
new SwooleStream(
|
||||
strval(
|
||||
json_encode([
|
||||
'ActionStatus' => 'OK',
|
||||
'ErrorCode' => 0,
|
||||
'ErrorInfo' => "",
|
||||
], JSON_UNESCAPED_UNICODE)
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user