shish 5 жил өмнө
parent
commit
bd9b8dd644

+ 44 - 5
biz-ghs/order/services/OrderService.php

@@ -18,6 +18,7 @@ use bizGhs\ws\services\WsService;
 use bizHd\purchase\services\PurchaseService;
 use bizHd\stat\classes\StatIncomeClass;
 use bizHd\stat\classes\StatOrderClass;
+use bizHd\wx\classes\WxOpenClass;
 use common\components\dict;
 use common\components\util;
 use bizHd\purchase\classes\PurchaseClass;
@@ -567,21 +568,59 @@ class OrderService extends BaseService
     }
 
     //退款订单
-    public static function refund($order,$post)
+    public static function refund($order, $post)
     {
 
         //订单状态变更  refund = 2
         $orderId = $order['id'];
-        OrderClass::updateById($orderId,['refund'=>2]);
+
+        $order = OrderClass::getLockById($orderId);
+        if (empty($order)) {
+            util::fail('没有找到订单');
+        }
+        $order->refund = 2;
+        $order->save();
+
+        $purchaseId = $order->purchaseId;
+        $cg = PurchaseClass::getLockById($purchaseId);
+        if (empty($cg)) {
+            util::fail('没有找到采购订单');
+        }
+        $transaction_id = $cg->thirdNo ?? '';
+        if (empty($transaction_id)) {
+            util::fail('第三方支付订单号没有找到');
+        }
+
         //记录退款订单
-        $post['relateOrderSn'] = $order['orderSn'];
-        RefundOrderClass::addOrder($post);
+        $post['relateOrderSn'] = $order->orderSn;
+        $refundOrder = RefundOrderClass::addOrder($post);
 
         //退钱(根据订单的支付类型 payWay)
         $payWay = $order['payWay'];
-        if($payWay == dict::getDict('payWay', 'wxPay')){
+        if ($payWay == dict::getDict('payWay', 'wxPay')) {
             //微信
 
+            ini_set('date.timezone', 'Asia/Shanghai');
+            error_reporting(E_ERROR);
+            $wx = Yii::getAlias("@vendor/weixin");
+            require_once($wx . '/lib/WxPay.Api.php');
+
+            $total_fee = $cg->realPirce * 100;
+            $refund_fee = 1;
+
+            $refundOrderSn = $refundOrder['orderSn'];
+
+            $merchantExtend = WxOpenClass::getWxInfo();
+            $mid = $merchantExtend['wxPayMerchantId'] ?? '';
+
+            $input = new \WxPayRefund();
+            $input->SetTransaction_id($transaction_id);
+            $input->SetTotal_fee($total_fee);
+            $input->SetRefund_fee($refund_fee);
+            $input->SetOut_refund_no($refundOrderSn);
+            $input->SetOp_user_id($mid);
+            printf_info(\WxPayApi::refund($input));
+
         }
 
     }

BIN
vendor/weixin/cert/apiclient_cert.p12


+ 22 - 24
vendor/weixin/cert/apiclient_cert.pem

@@ -1,26 +1,24 @@
 -----BEGIN CERTIFICATE-----
-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
+MIID8zCCAtugAwIBAgIUaLpfpG/KSAb1aLUpxltRgH/8PCgwDQYJKoZIhvcNAQEL
+BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
+FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
+Q0EwHhcNMjEwNjI4MDMyNDU1WhcNMjYwNjI3MDMyNDU1WjCBhDETMBEGA1UEAwwK
+MTYwNjc0OTA1OTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL
+DCfljqbpl6jkuK3oirHmsYfkv6Hmga/np5HmioDmnInpmZDlhazlj7gxCzAJBgNV
+BAYMAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAKMOflyi5Kakv/LOtQp4/uElBH/MmirQnFMC2gjleYZfWaTwjdhW
+2w1LcB0c6F5np5zx7QRJ7XT8837LkYGekxFVMKMMPc4Xq5v23z/qdWlRniA8PMEU
+NuxA6dz6/lqx0WknoldGYDC/ksaVklZTAi0BoZAqaRWFhI/IlNxyEXH6b6ZVecjG
+oDj/a0x15CxBFB0cP1Itf1XO3KZ4y1jShUuypX2PK0DXv3pSgq9FWAELyo8z/s/8
+HE3Zd7Jg4OQhVHyQdgEw5wqbejO056t8SdheDdHTgdGCJR3bPgNW1xH9cHia/QY1
+wfI8pN6DJoMaNHU3MbhZlvGoC5jR3cQtQdcCAwEAAaOBgTB/MAkGA1UdEwQCMAAw
+CwYDVR0PBAQDAgTwMGUGA1UdHwReMFwwWqBYoFaGVGh0dHA6Ly9ldmNhLml0cnVz
+LmNvbS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9MUJENDIyMEU1MERCQzA0QjA2QUQz
+OTc1NDk4NDZDMDFDM0U4RUJEMjANBgkqhkiG9w0BAQsFAAOCAQEAM0Dan5vqoY7y
+VQSNUYfYkMSDuUt3/b/gxPWyz9COEulSVR1qvUv4dMGGx8CHRdmenNp2jmbtpeSP
+svnbzPe0IfGSDcPWeYjJngCgG7awBIB4qPahO1EhpQbwtQH+VsBVFdsKT3sqW2ZE
+riM1O4Fh3srsj4i4m/tCZT/OksXr6+UtvmVlGCenQVADIWgW7lwjxQomSO0rZAYz
+z6mzHWXSFqh5OdfJWFuX9G5PzOKpuVSfIlAoQN/wMRlv/xZgwD5VSt5yO0LbDql3
+R8cpaLmDGL3FGyKKJPQYh/Wj0e8Cm5FxqzwbBzUuMJ1mkZoNNXfmD9+52yfOk2c3
+ESmmpM6Xaw==
 -----END CERTIFICATE-----

+ 28 - 27
vendor/weixin/cert/apiclient_key.pem

@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEA2lfWB/a41ppF+siCZkCVwYyLxRixuOwqEcajtHCS0zqCzF4/
-LHHX9yDZJqETWtPbPX2UYJIaug2/yMT/wzK0kxrDi1LOIqYo13wIJ0sntE6Bvb48
-JTfO6RtjOXD+Xane2pPzkMkpy7MAN+bXCjYWHuQ/4jj2bF8Iy31j0AcS10kjI6O2
-athkMSRQ/JNMNyGCiuHe2gbLfbGTeG+3m14gxWcYJMbVxd7jSRpb7uh90wHqOVaY
-psgd2SXulbXqHvPYUuJZdecn1gAbN1OFnnHyJfovbX5x2TK+rBr1xC7JHbvqfNTC
-9RdGjjCwdV1m7x3UsX61Sljt1fZ0666NzaUwjwIDAQABAoIBAQDEATXR0Fn9zGAl
-0Pm+cRv+s/yE4rYoG1lou7kZsjUcCdqBO9naPBhzcLl/Q/nr/2NAwAsC5iW3/7+6
-q54tzMbth4ki+SKzWBYx2tY27/CknBU8EBpODttfx4Y7eoPd8TBtZ4Ou5ebvRbFc
-fY1tTUBuWtg+bIRKpMVwZw/DH5Z6SzUHrDZNCY7h57GVKZVgjeq1upDfvy+fIf+x
-42KW1byhSi2WirD6D547u3pDk9KBxmnPXjJxkDQ5iHRKM1zG3yxTBQ56SHMJ7uw1
-AV9dtGDzO4TQGBLS16gfKVyGdjfkM4zmZDvOXxYB5Rbv0iJuTwEA/SENCkaYnBxv
-+byughqBAoGBAPBVmJjM8SS/fkinJ4K9ka9BiWyo8xmi2RIslyx32zuZI3XfzMfn
-2j0URN2IgpPL+4S1rdjYrJ35cbPhN9wIF9J/bb2lsOlno/+9dSbN1nO0nHpmQwKv
-+dh+rwdlDaV58p9hdjFXKDd8uv6hfJjpkwsmZubJPXrPGFOF22FhRRojAoGBAOiT
-Ru4GVj414mEvW94J8YaMFwrT7Cb3YjjxL0Xj1zE9OOq+JxEeanhYgf2sTpB4HzOA
-JKsg4F2CAd4G0mgQ47ykzYJneGV6iPydzdnXRloi/LBQI9HWZWjUBUHrMmmiWBVQ
-w7hQvsqx9bDmtMs8HpkEUB84uIAsPi/Tl4WkkMilAoGADLA4Mjj/sjT58dQBXgGs
-I1iObNIuo3fZhgAcqxhY1rirCpoaMaOn/fmH+TovyqXGTadZ2kz2MBDvU9PcIx26
-RD6+CHkq8eeq3OGfwcC0Rb+PU1b6yrWHt0pY60cGhWn+yTNYDhrP4L4REUhtT5Vl
-Uf1hCWYufMFaQ26ZunZsM4kCgYBO/QYP/RL5We+itiTrSlE/MwD4anU/3rD7Sd6W
-TAVf8b0M7Lvz8nKSoOy1LPoZ0tI1+YV6oVXSLD9aGtMHCQVvokEx0tZvEKjJswag
-v55jKpLLhsxDjh8u9SM7+hdLDRoBU0bFqJbD3KDnDdPFWovByFc141u2HFCaibBi
-cTvDCQKBgHCRbP/p9/8CJeFGWGdBIUDhJWLg39HQgSfIdN9qg3CJ7GMwO3MN5leL
-qT2v8GfNfzrnCKyCuV17U82D1MiWAR/LVW9/OwOoQG9l1QYLNhuPoNW72MtCuxtA
-HQD/8706yQZzLwdnDzUTuhQxJJtb1++pnNOBwi4NL0VfuYsO0/t1
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCjDn5couSmpL/y
+zrUKeP7hJQR/zJoq0JxTAtoI5XmGX1mk8I3YVtsNS3AdHOheZ6ec8e0ESe10/PN+
+y5GBnpMRVTCjDD3OF6ub9t8/6nVpUZ4gPDzBFDbsQOnc+v5asdFpJ6JXRmAwv5LG
+lZJWUwItAaGQKmkVhYSPyJTcchFx+m+mVXnIxqA4/2tMdeQsQRQdHD9SLX9Vztym
+eMtY0oVLsqV9jytA1796UoKvRVgBC8qPM/7P/BxN2XeyYODkIVR8kHYBMOcKm3oz
+tOerfEnYXg3R04HRgiUd2z4DVtcR/XB4mv0GNcHyPKTegyaDGjR1NzG4WZbxqAuY
+0d3ELUHXAgMBAAECggEAdTKYrnrCf+iQsrPSOmnHQQo7VqQ39ygkBCJbluNhWqy0
+ITJpsaKUJdUgCzzY4+n69nqI0nlUfK7HUU5+Ej1pFZ82qyrETZqD1UE3K5iYtY9d
+aWwCewDNjTgHH7ckFQoUK1G6hKJnxwIbPDMLkJJvUOwINTfWegqSwkn4fQ5b7aBe
+oxpUYkSal7/+1NRFG6fWMLMhFojgSMRbzZqv9B+u+PTAAgqH4IaIjhR+kVZdW7OQ
+JpYwDBuZECQAD78R4HyeENsgg6p88iiyEIhMMtP8GO8/gQeoNHsnE84FPlaQTem5
+jYlQARu9tQSqZ4nwODyyZl181BCkaBSTpwd9hDjdKQKBgQDVHPsc3DvbEneUfRbG
+ZJtm4XtRW3uLhCLaEpDCBlG1hp1vykHZNwvJHC34ETyE8Oc1c9c7Rd/GRRZx7b4V
+cZqqsFhANAUW5Jc2+Tmd7BJ3RdyGp5JPl7Q1ZMKyQec4tVG/Cea0w3fgN5rO97UJ
+LCKkoQ7y6pkphZGnst2IkT1O6wKBgQDD3rtWJ5LQblMm+7OaoB2e4eq2NK7iAC2l
+QPysm54i9G/F9DMsup3ol8yB2MBAZxvfGVxNylbqWQPjvjeENOvgIYbIVmbj2HzV
+vYrEeQGaMuyyfoCDpEzcK1kuHqnQoUyrvEjq3+GOUEo+IyvrFDamQHiCRajcMtPx
+JyBNPoLVxQKBgQCuvsbBUWzbI3deEHveTZyHbZhai7LwIXcabWK5VckmGa16ftQj
+slk9nJes8yU2tPpBAC2Z8p+cygWvgYv9tVtnXpXef0k1DldXwmAWN/6kQmqjF0CH
+dxNTPL3QwO1BuJvBE/NSgX0II1ATKVYOoVv+tfm2Adt5Cob2hVnVo5Ir5QKBgBWo
+uJCDWcHAoWNLLAYqNHxQQRMa6kfFe0at1AMGRktZOk7qfQoyLKn+tzeYj1HP1Q4r
+kMBtYoURiNOTQjJVY8vqCSx4GXKSiuNbzU+CjgHOJcxrHqzv6yvhg0ANVfvjCkZn
+UKzgSuHg0QTkAMRC/PQPZwQIze5jlHozOGgyRGd9AoGAZjbY+UjphqipbHxMfdKX
+4V1wytLjzRXmPfPhl6QeqWKiqkzyW/kaA9ep7jPGL3nQk0CDYvShIotBPBhm9rGH
+Z1hbiVb5U/4tQ5rNhkuUxhUEYVBesGbHznRCS7jvR7NFbaYBLy7z7v7+cbY8Fl9r
+Kcnl9S6XVwj+5/YkbT5Fkpo=
+-----END PRIVATE KEY-----

+ 18 - 0
vendor/weixin/cert/证书使用说明.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)下载