zgg преди 12 часа
родител
ревизия
49841f0334

+ 58 - 2
application/api/controller/h5/Notify.php

@@ -38,7 +38,7 @@ class Notify extends Controller
     }
 
 
-    //萍乡市人民医院
+    //萍乡市人民医院--公众号
     public function phOrderPx(){
         $config = config('app.wx_config_px');
         $app = Factory::payment($config);
@@ -94,7 +94,7 @@ class Notify extends Controller
     }
 
 
-    //萍乡市人民医院
+    //萍乡市人民医院--小程序
     public function phOrderPx2(){
         $config = config('app.wx_mini_config_ph_px');
         $app = Factory::payment($config);
@@ -121,6 +121,62 @@ class Notify extends Controller
 
         $response->send();
     }
+
+    //张家界中医院,张家界人民医院--公众号
+    public function phOrderZjj(){
+        $config = config('app.wx_config_zjj');
+        $app = Factory::payment($config);
+        $response = $app->handlePaidNotify(function ($message, $fail) {
+            if ($message['return_code'] === 'SUCCESS' && $message['result_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
+                // 用户是否支付成功
+                $tradeNo = $message['out_trade_no'];
+                // 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
+                $order = Db::name('ph_order_pay')->where('sn',$tradeNo)->find();
+                if (!$order || $order['status'] != 0) { // 如果订单不存在 或者 订单已经支付过了
+                    return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
+                }
+                $ret = model('PhOrderPay')->paySuccess($order['id'],2);
+                if(!$ret){
+                    trace('订单修改失败');
+                    $fail('订单修改失败');
+                }
+            } else {
+                return $fail('通信失败,请稍后再通知我');
+            }
+
+            return true; // 返回处理完成
+        });
+
+        $response->send();
+    }
+
+    //张家界中医院,张家界人民医院--小程序
+    public function phOrderZjj2(){
+        $config = config('app.wx_mini_config_ph_zjj');
+        $app = Factory::payment($config);
+        $response = $app->handlePaidNotify(function ($message, $fail) {
+            if ($message['return_code'] === 'SUCCESS' && $message['result_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
+                // 用户是否支付成功
+                $tradeNo = $message['out_trade_no'];
+                // 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
+                $order = Db::name('ph_order_pay')->where('sn',$tradeNo)->find();
+                if (!$order || $order['status'] != 0) { // 如果订单不存在 或者 订单已经支付过了
+                    return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
+                }
+                $ret = model('PhOrderPay')->paySuccess($order['id'],2);
+                if(!$ret){
+                    trace('订单修改失败');
+                    $fail('订单修改失败');
+                }
+            } else {
+                return $fail('通信失败,请稍后再通知我');
+            }
+
+            return true; // 返回处理完成
+        });
+
+        $response->send();
+    }
     public function xshopOrder(){
         $config = config('app.wx_config');
         $app = Factory::payment($config);

+ 4 - 14
application/api/controller/h5/PhOrders.php

@@ -55,13 +55,8 @@ class PhOrders extends Base
         if(!$info){
             HelpHander::error('订单不存在');
         }
-        if ($this->orgId == 100){
-            $config = config('app.wx_config_px');
-            $notify = config("app.app_host").'/api/h5/notify/phOrderPx';
-        }else{
-            $config = config('app.wx_config');
-            $notify = config("app.app_host").'/api/h5/notify/phorder';
-        }
+        $config = getPhConfig($this->orgId,1);
+        $notify = getPhNotify($this->orgId,config("app.app_host"),1);
         try{
             $openid = Db::name('wxuser')->where('id',$this->userId)->where('type',1)->value('openid');
             $app = Factory::payment($config);
@@ -99,13 +94,8 @@ class PhOrders extends Base
         if(!$info){
             HelpHander::error('订单不存在');
         }
-        if ($this->orgId == 100){
-            $config = config('app.wx_mini_config_ph_px');
-            $notify = config("app.app_host").'/api/h5/notify/phOrderPx2';
-        }else{
-            $config = config('app.wx_mini_config_ph');
-            $notify = config("app.app_host").'/api/h5/notify/phorder2';
-        }
+        $config = getPhConfig($this->orgId,2);
+        $notify = getPhNotify($this->orgId,config("app.app_host"),2);
         try{
             $openid = Db::name('wxuser')->where('id',$this->userId)->where('type',3)->value('openid');
             $app = Factory::payment($config);

+ 43 - 0
application/common.php

@@ -1669,4 +1669,47 @@ function remove_xss($str){
     $obj = new HTMLPurifier($cfg);
     return $obj->purify($str);
 }
+/*
+ * 根据orgId获取陪护配置
+ * $orgId
+ * $type 1=公众号,2=小程序
+ * */
+function getPhConfig($orgId,$type)
+{
+    switch ($orgId){
+        case 100:
+            $config = $type == 1 ? config('app.wx_config_px') : config('app.wx_mini_config_ph_px');
+            break;
+        case 115:
+        case 116:
+            $config = $type == 1 ? config('app.wx_config_zjj') : config('app.wx_mini_config_ph_zjj');
+            break;
+        default:
+            $config = $type == 1 ? config('app.wx_config') : config('app.wx_mini_config_ph');
+            break;
+    }
+    return $config;
+}
 
+/*
+ * 根据orgId获取支付回调链接
+ * $orgId
+ * $type 1=公众号,2=小程序
+ * $url 域名
+ * */
+function getPhNotify($orgId,$url,$type)
+{
+    switch ($orgId){
+        case 100:
+            $notify = ($type == 1 ? '/api/h5/notify/phOrderPx' : '/api/h5/notify/phOrderPx2');
+            break;
+        case 115:
+        case 116:
+            $notify = ($type == 1 ?  '/api/h5/notify/phOrderZjj' : '/api/h5/notify/phOrderZjj2');
+            break;
+        default:
+            $notify = ($type == 1 ? '/api/h5/notify/phorder' : '/api/h5/notify/phorder2');
+            break;
+    }
+    return $url.$notify;
+}

+ 1 - 5
application/common/model/PhOrderPay.php

@@ -234,11 +234,7 @@ class PhOrderPay extends Base
             }
 
             if($data['type'] == 2){ // 线上,微信退款
-                if ($pay['from'] == 1){
-                    $config = $orgId == 100 ? config('app.wx_config_px') : config('app.wx_config');
-                }else{
-                    $config = $orgId == 100 ? config('app.wx_mini_config_ph_px') : config('app.wx_mini_config_ph');
-                }
+                $config = getPhConfig($orgId,$pay['from']);
                 $app = \EasyWeChat\Factory::payment($config);
                 $ret = $app->refund->byOutTradeNumber($pay['sn'], $data['sn'], $pay['money']*100, $data['money']*100);
                 if($ret['return_code'] != 'SUCCESS' || $ret['result_code'] != 'SUCCESS'){

+ 40 - 0
config/app.php

@@ -259,6 +259,25 @@ return [
             'file' =>  env('runtime_path').'/log/wechat.log',
         ],
     ],
+    //-----陪护微信小程序配置 张家界中医院,张家界人民医院---------
+    'wx_mini_config_ph_zjj' => [
+        'app_id' => 'wx24a33c5d6e3816d6',
+        'secret' => 'b916c6c34cdfcf595359cce0e4dd016c',
+        'mch_id' => '1728038772', // 商户号
+        'key' => '29452e7ad4db9fb53ddc1a8ab66ecb2a',   // API 密钥  操作密码:667421
+        // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
+        'cert_path' => env('root_path').'public/certs3/apiclient_cert.pem',
+        'key_path' => env('root_path').'public/certs3/apiclient_key.pem',
+
+        // 下面为可选项
+        // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
+        'response_type' => 'array',
+
+        'log' => [
+            'level' => 'error',
+            'file' =>  env('runtime_path').'/log/wechat.log',
+        ],
+    ],
     //------微信公众号配置---------
   /*  'wx_config' => [
         'app_id' => 'wx2f0195c58ad8c3ec',
@@ -325,6 +344,27 @@ return [
             'file' => env('runtime_path').'/log/wechat.log',
         ],
     ],
+    //张家界中医院,张家界人民医院
+    'wx_config_zjj' => [
+        'app_id' => 'wx439b9d9527727911',
+        'secret' => '3a667f19a68cae15bd4276c7edad6346',
+
+        'mch_id' => '1728038772', // 商户号
+        'key' => '29452e7ad4db9fb53ddc1a8ab66ecb2a',   // API 密钥  操作密码:667421
+
+        // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
+        'cert_path' => env('root_path').'public/certs3/apiclient_cert.pem',
+        'key_path' => env('root_path').'public/certs3/apiclient_key.pem',
+
+        // 下面为可选项
+        // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
+        'response_type' => 'array',
+
+        'log' => [
+            'level' => 'error',
+            'file' => env('runtime_path').'/log/wechat.log',
+        ],
+    ],
 
     'weather_key'=>'125cc579816bceb875b413794c2b13d4',//获取聚合天气接口的key
 

BIN
public/certs3/apiclient_cert.p12


+ 25 - 0
public/certs3/apiclient_cert.pem

@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIUGHHHeVLu6vmnqWdPBcQ/RNegV98wDQYJKoZIhvcNAQEL
+BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
+FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
+Q0EwHhcNMjUwOTI1MDUyNDI2WhcNMzAwOTI0MDUyNDI2WjCBnDETMBEGA1UEAwwK
+MTcyODAzODc3MjEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMUgwRgYDVQQL
+DD/muZbljZflkInnq4vniankuJrnrqHnkIbmnInpmZDlhazlj7jlvKDlrrbnlYzm
+sLjlrprljLrliIblhazlj7gxCzAJBgNVBAYTAkNOMREwDwYDVQQHDAhTaGVuWmhl
+bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL2+8q6pM4wX/cFdgThp
+sDOKB0mjSAvrMdakUZ8w9hrO3hMPOSpnXe2Pldu0hIXXNG25ZiduXd2LOosbPgxM
+N3jl7E7A+s//ltL5ojg9b4vTcwSg4QaOwyYvwT2SNUxVa4uIvMpdG1S8ASOXGUkb
+uLRoTnJb3j8kQj5RgaXWeqlkfMWA1H2VRZgcpY9KbjgzkxG0PyI2AlBviAG9tc9D
+1nypb8yX6fq/0O7g9abjKEKX/4+r4TtCo5PSk51qRqwvX15pzxivmkb+m9unN15A
+6MO3yc2ohnmYPf58JcBuHvSAPwy34S0euT/CF2Ljm+BeGxP1QaSLMWrWnhTgC7b/
+Sv0CAwEAAaOBuTCBtjAJBgNVHRMEAjAAMAsGA1UdDwQEAwID+DCBmwYDVR0fBIGT
+MIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9p
+dHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThF
+QkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJCMjdBOUQzM0E4N0FEMUNERjU5MjZFMTQw
+MzcxMA0GCSqGSIb3DQEBCwUAA4IBAQCBMXp4d/H45P600/EzSMPzF/WPz7xhhn2T
+Rg1S/eW+2tui8PXwpRYBghMKkM+g9Q2jm8z/acAoAbBLn1KkA7wB9RImzQr6ONpq
+e4otft6WiOfaRRR8r+1kHosWycjJnSG2WFMwgiFZIuqN7qpchRa3qzjNaWltxT0j
++mWkB/v51z2AqGz/v0sICJkW4yoGu/1/SUm35Ov3s5OqroO/I86j0xWfx+5eavrR
+7x/4iOfQo+8RdXaAOzbhv48bi6bFhcQ86U9GwQ8xHjUQ/HBLK8SQxpzti9lEMGc8
+PzB1lwj1KPq1iMNWyWud/OEvtPzN7FHtIg8hiwBeY3whVZ6hBDFr
+-----END CERTIFICATE-----

+ 28 - 0
public/certs3/apiclient_key.pem

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC9vvKuqTOMF/3B
+XYE4abAzigdJo0gL6zHWpFGfMPYazt4TDzkqZ13tj5XbtISF1zRtuWYnbl3dizqL
+Gz4MTDd45exOwPrP/5bS+aI4PW+L03MEoOEGjsMmL8E9kjVMVWuLiLzKXRtUvAEj
+lxlJG7i0aE5yW94/JEI+UYGl1nqpZHzFgNR9lUWYHKWPSm44M5MRtD8iNgJQb4gB
+vbXPQ9Z8qW/Ml+n6v9Du4PWm4yhCl/+Pq+E7QqOT0pOdakasL19eac8Yr5pG/pvb
+pzdeQOjDt8nNqIZ5mD3+fCXAbh70gD8Mt+EtHrk/whdi45vgXhsT9UGkizFq1p4U
+4Au2/0r9AgMBAAECggEBAI1xCoyCWoeC1sjOf+XietNgf+A3lBw2XXdoE+P75mjD
+bi18+psOZKkSkJ4vKV5vtohYXLrl/ZiJEcHiM9WM9wjrM8Tc+9oS54YrSe5sdXsg
+yytXFYcC4pvTm1PfalWVk053Rmv/DcGTR7IVD2c8/+mTm26J5tjgmXTE40UQ5Wzg
+znTopC571oO8ZHPlWuAeiAkW7OS9kXZQIdAFTcO2Gty/3b7Lhg7pMyUxmSFG/jU3
+ts7uhTeQJtBPfUTIMpkLgh+V9Rf15f1Zdb8i4TYAXpJX7GqdTDcCKV18uvm6vUCA
+FuIxXNRoOOiTjBUlVlPff/CrGF2KpK7TMKzwDlZufC0CgYEA8NW6NLcBGNHbU7lR
+z9U6c56tf/TUtUrBoyCUm1lnLnfHLQJMsXUBGeTy9dAoCRRYIj2c5qPmUccDBzA9
+Dr3001Qv7G0cvEgLdQB2DZuiINKTuBQsBglIGsK1ggxnsI6L2umRoKEm9PEnZRmK
+Y2t3RWxJGbXjQTeBtUYolPmz7WMCgYEAybGpxAw7SQQjJULWaWvbwCsm3o6xkGlz
+I+G8gviYa6hpSGYlkhX5pWdGX7LYaCOWB3grOQssLlT11fH4uwS2wT5JhMbL8EW/
+eOovrabWvlPig/VUvsDyik9udGxzWV+PT4wKmst78bmaDGYWwFAwj2IDoXG0AVwY
+j34fpfOABB8CgYBty6KGod/4JsRtGRG5RKbPS0oiCcZnmFtLOXFGma22u5isZl38
+kTEdUwmJE4sNCJ9djOVZKOO56Jby0gUkEWnqZnkqulvdYqMGhl1LuuZhPF9oDpo7
+bkPXH2mMjoc/MN2FwfJIXu/Zv4+MQeabiMTpe4KgHBItC1cxA3lA4c4rrQKBgBne
+td21i+0joLZoykOfWAJgBo5JUzEotWIG1D0gUbyNT2O/5lXEh87VXktsDyHcXqP6
+n+CjNDmFIDse3D5wrlg++wMS1Jmu+I4zy4XEforPC6DNWN9WtEVVRt+cAXeXMDSN
+y9Zq/yzUF5Q7i/OC1ZeuhLSydtoty+Cr1rdccjEVAoGAfHQCeM3Johksej9rJS14
+YxNONdB7VbLsupyFPo4BFI5XTl6avi9mueziCh4ELOfaAKC2axb9ZP5uEnasTaG9
+9sIeTmENcxFGQ7dlPbRDslj+uthzmdfjmZr73nIZngvjR05HvYiDT/I68ODtecmf
+0M2wxYhrZRec8gb+xsH2T3o=
+-----END PRIVATE KEY-----

+ 18 - 0
public/certs3/璇佷功浣跨敤璇存槑.txt

@@ -0,0 +1,18 @@
+欢迎使用微信支付!
+附件中的三份文件(证书pkcs12格式、证书pem格式、证书密钥pem格式),为接口中强制要求时需携带的证书文件。
+证书属于敏感信息,请妥善保管不要泄露和被他人复制。
+不同开发语言下的证书格式不同,以下为说明指引:
+    证书pkcs12格式(apiclient_cert.p12)
+        包含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份
+        部分安全性要求较高的API需要使用该证书来确认您的调用身份
+        windows上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户号(如:1900006031)
+    证书pem格式(apiclient_cert.pem)
+        从apiclient_cert.p12中导出证书部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制
+        部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供
+        您也可以使用openssl命令来自己导出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem
+    证书密钥pem格式(apiclient_key.pem)
+        从apiclient_cert.p12中导出密钥部分的文件,为pem格式
+        部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供
+        您也可以使用openssl命令来自己导出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem
+备注说明:  
+        由于绝大部分操作系统已内置了微信支付服务器证书的根CA证书,  2018年3月6日后, 不再提供CA证书文件(rootca.pem)下载