Wechat.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. namespace app\inter\controller;
  3. use think\Db;
  4. use think\Log;
  5. use app\common\library\send_message;
  6. use app\common\library\Message;
  7. use app\inter\service\WechatService;
  8. class Wechat extends Base {
  9. public function wechatRefund(WechatService $wechatService) {
  10. $repsone = '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
  11. $api_key = '9759a66938e8411ad5889e2b5b394d94';
  12. Log::record('-----微信退款----开始----');
  13. Log::record('-----微信退款----xml----');
  14. $xml = file_get_contents("php://input");
  15. Log::record($xml);
  16. Log::record('-----xml转数组--------');
  17. $data = (array)simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); //将微信返回的XML 转换成数组
  18. Log::record($data);
  19. $req_info = $data['req_info'];
  20. // $req_info = 'Jsb+/EIaoJhD0BVWMEiFWeRuivKbS7/bs/wpgwHowHyvVNC+Kj3aiCsLHzQobul1mKwuKT/slYfoVgUQibGH+mEFcA2N10r6Qv5v+rwd7IXvMOM7iS7p9ciDD3fn+jZukjJdGME6KajDtD2rFs0MyZTqsKUTGQN1I8Q1w5aK7OISs437bXp5s4VgrxQWKNe5s18+ts2jrMoA91VXmHy024p010BiB1TJHr46cXC4zpZkeLtECkABhVlBGmDQPfw0JknMqaTriXRZPQcz2Ff/WuRPKPImiL9i0nVpcPuiFjIP863lWLfr2Aif7plPA/mJrAZ6K95hGRvAiiHqxEet7OjYMHu50OKnY/8j2pZjtBUX8Yr1fRnY+v8INLL8+CKS1tZRY0dAkilymPVOSN/naNkVILgwDrlYq5XisDMmXz2HzF1UBX0ZWNs5ltarJC8fyhLpZm1cd/prxcTB6KUm1mTnEYhToZLUlB0N2a0dCT9pm58oj8myMC6mJutCW79QCaHCtV6JIxjueErZkbWYEVSZWG+m7hcKcmcgGhqTcnXPLte5vE0imYoABZnw4uMnv9sMSVP0PhMJ8/JeeP/He/6oAHenvhPrh/J4Xpv/vCbDjVJo8Qo5xWFFG9pk/Aj1rlZiCqmJffy+TXkXceDp+wg4lEOIbZfENaqbj7gtN9RWFTjrtPapPBZzxGJQvEQKzF2TNoP7owsTUup3grDMuw/zreVYt+vYCJ/umU8D+YnTBdx9Q0Bog3qHSlEMnQten+v2X7cSwDcIzvf3UJKVD1041tiBKfJTJFvfbiT+q4vHLKcRn5q7QyWowKrGO/ZrWTIotM0m+1IRqVDHeCTGYDUMGDiQ/+1BupV135PlUg2tKHr0wIUS0wThD3z2ZZxcJ3VioCDcFmjPu128k1xqsjfz+1Np4DxiTZFR1W44wpF/E6Hwi11A440fABYGX4AF7UFBSNfStMCTjVAhcHaYY9P5AbNiUcENjwZEBWE5bcCKm2adIsdqT5isumPoFi6M5H7hL5slQoKqLadEPfazBMHE8r+m+UYLTHlCk9L/DLPmrkVk2HJzlATcg9VYTX+IPYqqv2kY/9BYW+q+O+a8gA==';
  21. // 对加密信息进行解密,需要用到商户秘钥
  22. $req_info_xml = openssl_decrypt(base64_decode($req_info), 'aes-256-ecb', md5($api_key),OPENSSL_RAW_DATA);
  23. Log::record($req_info_xml);
  24. $refund = (array)simplexml_load_string($req_info_xml, 'SimpleXMLElement', LIBXML_NOCDATA);
  25. $refund['timestamp'] = time();
  26. Log::record($refund);
  27. DB::table('wechat_refund_log')->insert( array_merge($refund, $data));
  28. $order_id = $refund['out_trade_no'];
  29. $order = DB::table('remote_order')->where('id', $order_id)->field('status, application_id')-find();
  30. if(!empty($order) && $order['status'] === Application::ORDER_STATUS['CANCEL']) {
  31. DB::table('remote_order')->where('id', $order_id)->update(['status' => Application::ORDER_STATUS['REDUCE']]);
  32. $remote_application = DB::table('remote_application')->where('id', $order['application_id'])->field('exam_id')-find();
  33. // $wechatService->pushWechatRefund($remote_application['exam_id']);
  34. $wechatService->pushWechatRefund($order_id);
  35. // todo 微信消息推送
  36. }
  37. Log::record('-----微信结束----xml----');
  38. return $repsone;
  39. }
  40. public function wechatCallback() {
  41. try {
  42. // $param = $_REQUEST['param'];
  43. $repsone = '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
  44. Log::record('-----微信支付回调----开始----');
  45. Log::record('-----微信支付返回----xml----');
  46. $xml = file_get_contents("php://input");
  47. Log::record($xml);
  48. Log::record('-----xml转数组--------');
  49. $data = (array)simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); //将微信返回的XML 转换成数组
  50. Log::record($data);
  51. $out_trade_no = $data['out_trade_no'];
  52. $data['timestamp'] = time();
  53. Log::record('-----添加流水记录----');
  54. Log::record($data);
  55. Db::table("wechat_pay_log")->insert($data);
  56. Log::record('-----获取订单信息-----');
  57. $order = Db::table("remote_order")->where("id", $out_trade_no)->field("id, status, super_doctor_id, application_id, hospital_id, doctor_id, exam_class")->find();
  58. Log::record($order);
  59. if($order && $order['status'] === Application::ORDER_STATUS['CREATE']) {
  60. $order['status'] = Application::ORDER_STATUS['PAYCOMPLTET'];
  61. $d = $order['super_doctor_id'];
  62. $aid = $order['application_id'];
  63. // todo 消息通知
  64. Log::record('-----更新订单状态-----');
  65. DB::table("remote_order")->where("id", $out_trade_no)->update($order);
  66. $application = DB::table('remote_application')->where('id', $aid)->field('exam_id')->find();
  67. $exam_id = $application['exam_id'];
  68. $r_info = DB::table('report')->where('exam_id',$exam_id)->where('id, remote_application_id', $aid)->find();
  69. $t = '收到一条远程诊断申请';
  70. $ins = DB::table('institution')->where('id',$order['hospital_id'])->field('name')->find();
  71. $doctor = DB::table('doctors')->where('id',$order['doctor_id'])->field('realname')->find();
  72. $c = $ins['name'].$doctor['realname'].'医师向您发起一条远程诊断申请';
  73. $type = '1';
  74. $url = Message::url(null, $exam_id,1,$order['exam_class'],$r_info['id'],$aid);
  75. Log::record('-----系统内消息通知-----');
  76. Message::insert($t,$c,$d,$type,$url,1,$aid);
  77. //保存 申请
  78. if(empty($d)) {
  79. Log::record('---微信支付回调---结束---没有远程医生');
  80. return $repsone;
  81. }
  82. $dinfo = DB::table('doctors')->where('id, institution_id, send_sms',$d)->find();
  83. $d_phone = $dinfo['phone'];
  84. $d_name = $dinfo['realname'];
  85. if($order['is_urgent'] === 1) {
  86. $d_time = date('H:i',strtotime('+30 min'));
  87. } else {
  88. $d_time = date('H:i',strtotime('+1 hour'));
  89. }
  90. if($dinfo['institution_id'] == '22100003' || $dinfo['send_sms'] == 1){ //魏庙
  91. Log::record('-----短信通知-----');
  92. send_message::sendSms2Apply($d_phone,$d_time,$d_name);
  93. }
  94. }
  95. Log::record('---微信支付回调---结束---');
  96. return $repsone;
  97. } catch (\Throwable $th) {
  98. Log::record('支付回调异常');
  99. Log::record($th->getMessage());
  100. //throw $th;
  101. }
  102. // $order_id = $param['order_id'];
  103. // $remote_order = DB::table('remote_order')->where('id', $order_id)->find();
  104. // if(!$remote_order) {
  105. // return json_encode(['status'=>'fail','code'=>'3001','msg'=> "没有找到该订单"]);
  106. // }
  107. // if($remote_order !== Application::ORDER_STATUS['CREATE']) {
  108. // return json_encode(['status'=>'fail','code'=>'3002','msg'=> "订单状态出错"]);
  109. // }
  110. // DB::table('remote_order')->where('id', $order_id)->update(["status" => Application::ORDER_STATUS['PAYCOMPLTET']]);
  111. // return json_encode(['status'=>'ok','code'=>'0000','msg'=> "支付回调成功"]);
  112. }
  113. }