Bläddra i källkod

增加商户号

zgg 3 månader sedan
förälder
incheckning
1bb43a238a

+ 1 - 1
application/admin/controller/GOrders.php

@@ -76,7 +76,7 @@ class GOrders extends Auth
      */
     public function refund($id = 0){
         if(request()->isPost()){
-            $res = model('GOrders')->refundOrder($this->userId);
+            $res = model('GOrders')->refundOrder($this->userId,$this->orgId);
             if($res){
                 $this->success('操作成功',url('index'));
             }else{

+ 1 - 1
application/admin/controller/PhOrders.php

@@ -275,7 +275,7 @@ class PhOrders extends Auth
      */
     public function refund($id = 0){
         if(request()->isPost()){
-            $res = model('PhOrderPay')->refundOrder($this->userId);
+            $res = model('PhOrderPay')->refundOrder($this->userId,$this->orgId);
             if($res){
                 $this->success('操作成功',url('index'));
             }else{

+ 29 - 0
application/api/controller/h5/Notify.php

@@ -36,6 +36,35 @@ class Notify extends Controller
 
         $response->send();
     }
+
+
+    //萍乡市人民医院
+    public function phOrderPx(){
+        $config = config('app.wx_config_px');
+        $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);

+ 8 - 3
application/api/controller/h5/PhOrders.php

@@ -55,8 +55,13 @@ class PhOrders extends Base
         if(!$info){
             HelpHander::error('订单不存在');
         }
-        $config = config('app.wx_config');
-        $notify = config("app.app_host").'/api/h5/notify/phorder';
+        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';
+        }
         try{
             $openid = Db::name('wxuser')->where('id',$this->userId)->where('type',1)->value('openid');
             $app = Factory::payment($config);
@@ -82,7 +87,7 @@ class PhOrders extends Base
             trace($ret);
         }catch (\Exception $e){
             trace($e->getMessage());
-            HelpHander::error('获取参数失败');
+            HelpHander::error($e->getMessage());
         }
 
         HelpHander::success($ret,'成功');

+ 1 - 1
application/api/controller/v1/PhOrders.php

@@ -131,7 +131,7 @@ class PhOrders extends Base
      * 退款
      */
     public function refund(){
-        $res = model('PhOrderPay')->refundOrder($this->userId);
+        $res = model('PhOrderPay')->refundOrder($this->userId,$this->orgId);
         if($res){
             HelpHander::success([],'操作成功');
         }else{

+ 2 - 2
application/common/model/PhOrderPay.php

@@ -157,7 +157,7 @@ class PhOrderPay extends Base
         return true;
     }
 
-    public function refundOrder($userId){
+    public function refundOrder($userId,$orgId){
         $data = [
             'type' => input('type/d',1),
             'money' => input('money/f',0),
@@ -226,7 +226,7 @@ class PhOrderPay extends Base
             }
 
             if($data['type'] == 2){ // 线上,微信退款
-                $config = config('app.wx_config');
+                $config = $orgId == 100 ? config('app.wx_config_px') : config('app.wx_config');
                 $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'){

+ 22 - 0
config/app.php

@@ -266,6 +266,28 @@ return [
         ],
     ],
 
+    // 萍乡市人民医院
+    'wx_config_px' => [
+        'app_id' => 'wx439b9d9527727911',
+        'secret' => '3a667f19a68cae15bd4276c7edad6346',
+
+        'mch_id' => '1718480120', // 商户号
+        'key' => '29452e7ad4db9fb53ddc1a8ab66ecb2a',   // API 密钥  操作密码:667421
+
+        // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
+        'cert_path' => env('root_path').'public/certs2/apiclient_cert.pem',
+        'key_path' => env('root_path').'public/certs2/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/certs2/apiclient_cert.p12


+ 25 - 0
public/certs2/apiclient_cert.pem

@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIENzCCAx+gAwIBAgIUZL1/6mRQrogm5/mWKfOmCktpFk8wDQYJKoZIhvcNAQEL
+BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
+FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
+Q0EwHhcNMjUwNjA2MDEwMjU2WhcNMzAwNjA1MDEwMjU2WjCBkDETMBEGA1UEAwwK
+MTcxODQ4MDEyMDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTwwOgYDVQQL
+DDPmuZbljZflkInnq4vniankuJrnrqHnkIbmnInpmZDlhazlj7jokI3kuaHliIbl
+hazlj7gxCzAJBgNVBAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAN89lF3rhplNdSpdFRV6CYmVqN+E10iRd1M7
+IZDCwFzqIsHmrzu2gZeCniQCFWFd/HViLIKHomrc+SZ50XOY1ZyZxOYwt3tMQTZ6
+iYE6+eQ5SNHMYWJnrP3xU8pN/fvE/e4wYF1/8AuMfScLemdkYliXuemdldGPtNgZ
+xBsiwKiO6wuE/6g8gMj5NNFMRLzdbcvICcL8QZjzW0ht9tTc57ghVhwq8sSDYd4r
+5QEFMXlHCDDbplGZJm4VNAWYXNzsZJes35SMV4hReFDc4+yDiMb39ZYz/c3cMp9V
+oY6uMSgKg3wTvn35Vhxenpd+8kAIPWwMGNKIorz/pyGT/ncpOskCAwEAAaOBuTCB
+tjAJBgNVHRMEAjAAMAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGH
+hoGEaHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0x
+QkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0
+NzFCNjU0MjJFMTJCMjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3
+DQEBCwUAA4IBAQBz0IXpmQgOKrSz/gbGQEBHyYXvXzccGyt225JeaNFS+ulNBmcc
+F+7uQNQXLpjXe/hLcWhH1vSp6hB8cFE6vpEpZmn0AuZHGkLj3u1UB1X6ohIm9+fg
+0KghWBC46Ju7CQM5W0bp7EACDBr2r5KvV6vjE9rnv0zrnT17j3LFZfwbBZU398ic
+RL6aV9eHc3AmET2uMWR9zmC1nZnIujrPfyTMNR2J50QSv1cDz6CTRnBHhrdha77i
+csZBFM4bkZYQNXUUFE52/L+EfylZIF19mMQxv+SIw4ykiC/kGbquOss73xbSfPq7
+2MJv2r/x6cwunYq6O30vm94XQhWXQTX6hL/r
+-----END CERTIFICATE-----

+ 28 - 0
public/certs2/apiclient_key.pem

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDfPZRd64aZTXUq
+XRUVegmJlajfhNdIkXdTOyGQwsBc6iLB5q87toGXgp4kAhVhXfx1YiyCh6Jq3Pkm
+edFzmNWcmcTmMLd7TEE2eomBOvnkOUjRzGFiZ6z98VPKTf37xP3uMGBdf/ALjH0n
+C3pnZGJYl7npnZXRj7TYGcQbIsCojusLhP+oPIDI+TTRTES83W3LyAnC/EGY81tI
+bfbU3Oe4IVYcKvLEg2HeK+UBBTF5Rwgw26ZRmSZuFTQFmFzc7GSXrN+UjFeIUXhQ
+3OPsg4jG9/WWM/3N3DKfVaGOrjEoCoN8E759+VYcXp6XfvJACD1sDBjSiKK8/6ch
+k/53KTrJAgMBAAECggEAdG6EpFuD7w70De1QYswsj0KsOi/prKKZ7qIHhp3cgFlp
+WWI8gNNWUbRBUJx5lDfVxU830bh2IHAxzjx43maW+r9Eb553A+qolIZikzE0RjEO
+ZsXHAPD7y9KDFh+JWTfMDN/UUs+4Xf2fBK863xP/Kx+vSkXzbsIZ2x/NJS4B96bg
+0jiuDjx77LyzsAqRvk/F09ZsfSS7mPlMrPedh8psnjLo6p2SE0GHGL3g4jEWp4/B
+JsRKuOmQtLH3D7Ebc9cpLmwJ0Khsqmhmcgn4KFuc4btmLd8bVh+rO+uRTWpND1Uq
+amASV2o+5f8C9W2mzKS/XdxKibk2FSepDYuY1fqklQKBgQD/ClrhA6hEIIcZhvzW
+vYM7uEB7KruBt+nIm+uRFuE0DlYq9yF4H9DPCJrBupCkv5tBCBNRlkla3CINYDuX
+aA/ctIKpUURMQCP7akBGb9/7hwSUmWxxFdfWlwSdIUczBjm9NXMV7uJevOKd8ObE
+7EkXK7wunL5P2MYDmMxm9wnSwwKBgQDgFJicXtUYXK1FUtED7IrPJl0kK+4W4yKe
+31D0isrjsGNRVHUH/L118fAAzOKf6Jraj5DQmYRI5ezNOTCPOaErJcKfUiV4TQuf
+DMKpG7IrZ2N144H0j0Bc7y7dApEl1FO5OZ1Vz5Pni7fhuws29sZgcqjQEGOyMXOk
+zGmvYVwLgwKBgGNABF3Mro7Umb61aW+oEIoNCgrkdlPk3nXTN7kezkUTzzSpN70n
+pHrtPkxl7iQu7JxCKEJ32dQiFp5d9NLXDFU3aiG6HnoN+/K7RogiwWeBA6dQjYL0
+nSpFWuZLLQoOQin/wummLTHxD7+nICdCTK9XtcPt+6HXGjgMHn9zY79BAoGBALNq
+ik8Z91GMUwggqU6VBQeb1hPyQK5+que+Mtm6j30DbGJgV1xP13sqflqFsicLXYIG
+VZNQeATOZG5ljiX/pLYhg9WBNpM+TUHKO8qfbGcoXxCzWwhv8r72m/VF6uX5Phge
+s4VTsT9CNbc9xlr5+BiddeEyXkD9K3UWXsCYGdT1AoGBAPgGVgRLU6a4h37LVez3
+1hDPTYelBLXUrFsS9i6m3hddgpfqR01/kOG+d8Vn41YiPYF+TAlsgqU3shZYq1F6
+7AA6ZD8XoWk5tL93+vqTB2X3TDH8gCnQM+Zr2tLXxe4NRfg0hdIEN66Pse6bMWoA
+A7NuFCIzrVekOIGSU/vGqUuC
+-----END PRIVATE KEY-----

+ 18 - 0
public/certs2/璇佷功浣跨敤璇存槑.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)下载