鼠笼管理系统
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.

405 lines
18 KiB

<?php
ini_set('date.timezone','Asia/Shanghai');
error_reporting(E_ERROR);
require_once "../lib/WxPay.Api.php";
require_once '../lib/WxPay.Notify.php';
require_once 'log.php';
require_once '../lib/Base.php';
//初始化日志
$logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log');
$log = Log::Init($logHandler, 15);
class PayNotifyCallBack extends WxPayNotify
{
//查询订单
public function Queryorder($transaction_id)
{
$input = new WxPayOrderQuery();
$input->SetTransaction_id($transaction_id);
$result = WxPayApi::orderQuery($input);
Log::DEBUG("query:" . json_encode($result));
if(array_key_exists("return_code", $result)
&& array_key_exists("result_code", $result)
&& $result["return_code"] == "SUCCESS"
&& $result["result_code"] == "SUCCESS")
{
return true;
}
return false;
}
//重写回调处理函数
public function NotifyProcess($data, &$msg)
{
Log::DEBUG("call back:" . json_encode($data));
$notfiyOutput = array();
if(!array_key_exists("transaction_id", $data)){
$msg = "输入参数不正确";
return false;
}
//查询订单,判断订单真实性
if(!$this->Queryorder($data["transaction_id"])){
$msg = "订单查询失败";
return false;
}else{
if(!isset($_SESSION)) {
session_start();
}
$tMO = new Model('wxorder');
$tDatas = $tMO->field('*')->where('out_trade_no = \''.$data['out_trade_no'].'\'')->select();
//查询卡号
$tMCMO = new Model('medical_card');
$tMCDatas = $tMCMO->field('*')->where('med_c_uid = '.$tDatas[0]['uid'].' and med_c_status = 1')->select();
$tTime = time();
if(empty($tDatas)) {
return false;
}else {
$tCardNo = $tMCDatas[0]['med_c_card_no'];
$tRegId = $tDatas[0]['regid'];
$tRepeiceNo = $tDatas[0]['repeiceno'];
$tTotalFee = $tDatas[0]['total_fee'];
$tPatientID = $tDatas[0]['patientid'];
$tId = $tDatas[0]['id'];
if($tDatas[0]['prepay_id'] == 1) {//门诊缴费
Log::DEBUG('call back request:'.json_encode($tDatas));
$url = 'http://58.20.248.95:4419/apiv1_outpayment/payadm';
$post = 'cardno='.$tCardNo.'&regid='.$tRegId.'&repeiceno='.$tRepeiceNo.'&total_fee='.$tTotalFee;
$ch = curl_init();//初始化url
curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$cdata = curl_exec($ch);//运行curl
// print_r($data);
$datas = json_decode($cdata, true);
curl_close($ch);
if($cdata){//his接口请求成功
//his接口请求成功,写入日志文件
$tStr = 'his接口请求成功,请求参数:'.$post.'返回结果:'.json_encode($cdata);
Log::DEBUG($tStr);
// $tStr1 = 'test结果:'.$cdata;
// $tStr1 = 'test结果:'.$datas['repmsg']['Header']['ResultCode'];
// Log::DEBUG($tStr1);
if(!empty($datas['repmsg']['Header']['ResultCode'])){
$tReq = array(
'transaction_id' => $data['transaction_id'],
'status' => 2,
);
$tSql = 'update wxorder set transaction_id = \''.$data['transaction_id'].'\',status = 2 where id='.$tId;
$tResHis = $tMO->query($tSql);
if($tResHis) {
$tStr = 'his请求成功,微信订单表信息更新已支付未更新状态失败,请求参数:'.json_encode($tReq).'门诊缴费支付接口返回结果:'.json_encode($data);
Log::DEBUG($tStr);
}else {
$tStr = 'his请求成功,微信订单表信息更新已支付未更新状态成功,请求参数:'.json_encode($tReq).'门诊缴费支付接口返回结果:'.json_encode($data);
Log::DEBUG($tStr);
}
//his状态更新失败执行退费
$url = 'http://lyl.medical.91paiyipai.com/wxpay/example/refund.php';
$post_refund = 'out_trade_no='.$data['out_trade_no'].'&total_fee='.$data['total_fee'].'&refund_fee='.$data['total_fee'];
$ch = curl_init();//初始化url
curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_refund);
$cdata_refund = curl_exec($ch);//运行curl
// print_r($data);
curl_close($ch);
$datas_refund = json_decode($cdata_refund, true);
$tTime = time();
//判断是否退费成功
if($datas_refund['data']['result_code'] != 'SUCCESS') {
$tStr = 'his请求成功,请求参数:'.$post.'微信退费失败,请求参数:'.$post_refund.'返回结果:'.json_encode($datas_refund);
Log::DEBUG($tStr);
}else {
//更新退费信息
$tRMO = new Model('refund');
$tData = array(
'name' => $tMCDatas[0]['med_c_user_name'],
'total_fee' => $tTotalFee,
'uid' => $tDatas[0]['uid'],
'prepay_id' => $tDatas[0]['prepay_id'],
'out_trade_no' => $data['out_trade_no'],
'created' => $tTime,
'status' => 4,
'refund_id' => $datas_refund['data']['refund_id'],
);
if(!$tRMO->insert($tData)) {
$tStr = 'his请求成功,请求参数:'.$post.'微信退费成功'.$cdata_refund.',返回结果:'.json_encode($datas_refund).'微信退费表信息插入失败,请求参数:'.json_encode($tData);
Log::DEBUG($tStr);
}else{
$tStr = 'his请求成功,请求参数:'.$post.'微信退费成功'.$cdata_refund.',返回结果:'.json_encode($datas_refund).'微信退费表信息插入成功,请求参数:'.json_encode($tData);
Log::DEBUG($tStr);
}
//更新订单信息
$tMO = new Model('wxorder');
$tSql = 'update wxorder set status = 4 where id = '.$tId;
$tResRefund = $tMO->query($tSql);
if($tResRefund) {
$tStr = 'his请求成功,微信订单退费状态更新失败,返回结果:'.json_encode($tResRefund);
Log::DEBUG($tStr);
}else{
$tStr = 'his请求成功,微信订单退费状态更新成功,返回结果:'.json_encode($tResRefund);
}
}
}else{
$tReq = array(
'transaction_id' => $data['transaction_id'],
'status' => 3,
'uid' => $tDatas[0]['uid'],
);
$tSql = 'update wxorder set transaction_id = \''.$data['transaction_id'].'\',status = 3 where id = '.$tId;
$tResHis = $tMO->query($tSql);
if($tResHis) {
$tStr = 'his请求成功,微信订单表信息更新已支付已更新状态失败,请求参数:'.json_encode($tReq).'门诊缴费支付接口返回结果:'.json_encode($data);
Log::DEBUG($tStr);
}else{
$tStr = 'his请求成功,微信订单表信息更新已支付已更新状态成功,请求参数:'.json_encode($tReq).'门诊缴费支付接口返回结果:'.json_encode($data);
Log::DEBUG($tStr);
}
}
}else{//his接口请求失败执行退费
//his请求失败,写入日志文件
$tStr = 'his接口请求失败,请求参数:'.$post.',返回结果:'.json_encode($cdata);
Log::DEBUG($tStr);
$url = 'http://lyl.medical.91paiyipai.com/wxpay/example/refund.php';
$post = 'out_trade_no='.$data['out_trade_no'].'&total_fee='.$data['total_fee'].'&refund_fee='.$data['total_fee'];
$ch = curl_init();//初始化url
curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$cdata_refund = curl_exec($ch);//运行curl
// print_r($data);
curl_close($ch);
$datas_refund = json_decode($cdata_refund, true);
$tTime = time();
//判断是否退费成功
if($datas_refund['data']['result_code'] != 'SUCCESS') {
$tStr = 'his请求失败,微信退费失败,请求参数:'.$post.'返回结果:'.json_encode($datas_refund);
Log::DEBUG($tStr);
}else {
//更新退费信息
$tRMO = new Model('refund');
$tData = array(
'name' => $tMCDatas[0]['med_c_user_name'],
'total_fee' => $tTotalFee,
'uid' => $tMCDatas[0]['med_c_uid'],
'prepay_id' => $tDatas[0]['prepay_id'],
'out_trade_no' => $data['out_trade_no'],
'created' => $tTime,
'status' => 4,
'refund_id' => $datas_refund['data']['refund_id'],
);
if(!$tRMO->insert($tData)) {
$tStr = 'his请求失败,微信退费成功,请求参数:'.$post.'返回结果:'.json_encode($datas_refund).'微信退费表信息插入失败,请求参数:'.json_encode($tData);
Log::DEBUG($tStr);
}else{
$tStr = 'his请求失败,微信退费成功,请求参数:'.$post.'返回结果:'.json_encode($datas_refund).'微信退费表信息插入成功,请求参数:'.json_encode($tData);
Log::DEBUG($tStr);
}
//更新订单信息
$tMO = new Model('wxorder');
$tSql = 'update wxorder set status = 4,name = \''.$tMCDatas[0]['med_c_user_name'].'\' where id = '.$tId;
$tResRefund = $tMO->query($tSql);
if($tResRefund) {
$tStr = 'his请求失败,微信订单退费状态更新失败,返回结果:'.json_encode($tResRefund);
Log::DEBUG($tStr);
}else{
$tStr = 'his请求失败,微信订单退费状态更新成功,返回结果:'.json_encode($tResRefund);
Log::DEBUG($tStr);
}
}
}
}
if($tDatas[0]['prepay_id'] == 2) {//住院缴费
$url = 'http://58.20.248.95:4419/apiv1_inpdeposit/recharge';
$post = 'patientid='.$tPatientID.'&paymt='.$tTotalFee;
$ch = curl_init();//初始化url
curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$cdata = curl_exec($ch);//运行curl
// print_r($data);
$datas = json_decode($cdata, true);
curl_close($ch);
if($cdata){//his接口请求成功
//his请求成功,写入日志文件
$tStr = 'his住院缴费接口请求成功,请求参数:'.$post.'返回结果:'.json_encode($cdata);
Log::DEBUG($tStr);
if(!empty($datas['repmsg']['Header']['ResultCode'])){//his更新失败执行退费
//his请求失败,写入日志文件
$tStr = 'his接口请求失败,请求参数:'.$post.',返回结果:'.json_encode($cdata);
Log::DEBUG($tStr);
$url = 'http://lyl.medical.91paiyipai.com/wxpay/example/refund.php';
$post_refund = 'out_trade_no='.$data['out_trade_no'].'&total_fee='.$data['total_fee'].'&refund_fee='.$data['total_fee'];
$ch = curl_init();//初始化url
curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_refund);
$cdata_refund = curl_exec($ch);//运行curl
// print_r($data);
curl_close($ch);
$datas_refund = json_decode($cdata_refund, true);
$tTime = time();
//判断是否退费成功
if($datas_refund['data']['result_code'] != 'SUCCESS') {
$tStr = 'his住院押金请求成功,微信退费失败,请求参数:'.$post.'返回结果:'.json_encode($datas_refund);
Log::DEBUG($tStr);
}else {
//更新退费信息
$tRMO = new Model('refund');
$tData = array(
'name' => $tMCDatas[0]['med_c_user_name'],
'total_fee' => $tTotalFee,
'uid' => $tDatas[0]['uid'],
'prepay_id' => $tDatas[0]['prepay_id'],
'out_trade_no' => $data['out_trade_no'],
'created' => $tTime,
'status' => 4,
'refund_id' => $datas_refund['data']['refund_id'],
);
if(!$tRMO->insert($tData)) {
$tStr = 'his住院押金请求成功,请求参数:'.$post.',微信退费成功,请求参数:'.$post_refund.'返回结果:'.json_encode($datas_refund).'微信退费表信息插入失败,请求参数:'.json_encode($tData);
Log::DEBUG($tStr);
}else{
$tStr = 'his住院押金请求成功,请求参数:'.$post.',微信退费成功,请求参数:'.$post_refund.'返回结果:'.json_encode($datas_refund).'微信退费表信息插入成功,请求参数:'.json_encode($tData);
Log::DEBUG($tStr);
}
//更新订单信息
$tMO = new Model('wxorder');
$tSql = 'update wxorder set status = 4,name = \''.$tMCDatas[0]['med_c_user_name'].'\' where id = '.$tId;
$tResRefund = $tMO->query($tSql);
if($tResRefund) {
$tStr = 'his住院押金请求成功,请求参数:'.$post.',微信退费成功,请求参数:'.$post_refund.'微信订单退费状态更新失败,返回结果:'.json_encode($tResRefund);
Log::DEBUG($tStr);
}else{
$tStr = 'his住院押金请求成功,请求参数:'.$post.',微信退费成功,请求参数:'.$post_refund.'微信订单退费状态更新成功,返回结果:'.json_encode($tResRefund);
Log::DEBUG($tStr);
}
}
$tReq = array(
'transaction_id' => $data['transaction_id'],
'status' => 2,
);
$tSql = 'update wxorder set transaction_id = \''.$data['transaction_id'].'\',status = 2 where id='.$tId;
$tResHis = $tMO->query($tSql);
if($tResHis) {
$tStr = 'his住院押金请求成功,请求参数:'.$post.',微信退费成功,请求参数:'.$post_refund.'微信订单更新已支付未更新状态失败,返回结果:'.json_encode($tResHis);
Log::DEBUG($tStr);
}else {
$tStr = 'his住院押金请求成功,请求参数:'.$post.',微信退费成功,请求参数:'.$post_refund.'微信订单更新已支付未更新状态成功,返回结果:'.json_encode($tResHis);
Log::DEBUG($tStr);
}
}else{//his更新成功
$tReq = array(
'transaction_id' => $data['transaction_id'],
'status' => 3,
);
$tSql = 'update wxorder set transaction_id = \''.$data['transaction_id'].'\',status = 3 where id = '.$tId;
$tResHis = $tMO->query($tSql);
if($tResHis) {
$tStr = 'his住院押金请求成功,请求参数:'.$post.',微信缴费成功,微信订单更新已支付已更新状态失败,返回结果:'.json_encode($tResHis);
Log::DEBUG($tStr);
}else{
$tStr = 'his住院押金请求成功,请求参数:'.$post.',微信缴费成功,微信订单更新已支付已更新状态成功,返回结果:'.json_encode($tResHis);
Log::DEBUG($tStr);
}
}
}else{//his请求失败,执行自动退费
//his请求失败,写入日志文件
$tStr = 'his住院押金接口请求失败,请求参数:'.$post.',返回结果:'.json_encode($cdata);
Log::DEBUG($tStr);
$url = 'http://lyl.medical.91paiyipai.com/wxpay/example/refund.php';
$post = 'out_trade_no='.$data['out_trade_no'].'&total_fee='.$data['total_fee'].'&refund_fee='.$data['total_fee'];
$ch = curl_init();//初始化url
curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$cdata_refund = curl_exec($ch);//运行curl
// print_r($data);
curl_close($ch);
$datas_refund = json_decode($cdata_refund, true);
$tTime = time();
//判断是否退费成功
if($datas_refund['data']['result_code'] != 'SUCCESS') {
$tStr = 'his住院押金请求失败,微信退费失败,请求参数:'.$post.'返回结果:'.json_encode($datas_refund);
Log::DEBUG($tStr);
}else {
//更新退费信息
$tRMO = new Model('refund');
$tData = array(
'name' => $tMCDatas[0]['med_c_user_name'],
'total_fee' => $tTotalFee,
'uid' => $tMCDatas[0]['med_c_uid'],
'prepay_id' => $tDatas[0]['prepay_id'],
'out_trade_no' => $data['out_trade_no'],
'created' => $tTime,
'status' => 4,
'refund_id' => $datas_refund['data']['refund_id'],
);
if(!$tRMO->insert($tData)) {
$tStr = 'his住院押金请求失败,微信退费成功,请求参数:'.$post.'返回结果:'.json_encode($datas_refund).'微信退费表信息插入失败,请求参数:'.json_encode($tData);
Log::DEBUG($tStr);
}else{
$tStr = 'his住院押金请求失败,微信退费成功,请求参数:'.$post.'返回结果:'.json_encode($datas_refund).'微信退费表信息插入成功,请求参数:'.json_encode($tData);
Log::DEBUG($tStr);
}
//更新订单信息
$tMO = new Model('wxorder');
$tSql = 'update wxorder set status = 4,name = \''.$tMCDatas[0]['med_c_user_name'].'\' where id = '.$tId;
$tResRefund = $tMO->query($tSql);
if($tResRefund) {
$tStr = 'his住院押金请求失败,微信订单退费状态更新失败,返回结果:'.json_encode($tResRefund);
Log::DEBUG($tStr);
}else{
$tStr = 'his住院押金请求失败,微信订单退费状态更新成功,返回结果:'.json_encode($tResRefund);
Log::DEBUG($tStr);
}
}
}
}
}
Log::DEBUG('call 跳转页面:'.json_encode($data));
return '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
}
return true;
}
}
Log::DEBUG("begin notify");
$notify = new PayNotifyCallBack();
$notify->Handle(true);