Jelajahi Sumber

Wesmiler 2021-0115第4期分销功能新增

wesmiler 5 tahun lalu
induk
melakukan
831db24446
3 mengubah file dengan 68 tambahan dan 8 penghapusan
  1. 26 8
      app/weixin/model/Wechat.php
  2. 18 0
      data/cert/pay_cert.pem
  3. 24 0
      data/cert/pay_key.pem

+ 26 - 8
app/weixin/model/Wechat.php

@@ -64,6 +64,12 @@ class Wechat
         'token' => 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s',
     ];
 
+    // 支付证书
+    protected static $certPaths = [
+        'cert_path'=> CMF_DATA.'cert/pay_cert.pem',
+        'key_path'=> CMF_DATA.'cert/pay_key.pem',
+    ];
+
     /**
      * 授权地址校验
      */
@@ -644,10 +650,10 @@ class Wechat
         if ($unifiedOrder === false) {
             return ['code' => 'exception', 'message' => 'parase xml error'];
         }
-        if ($unifiedOrder['return_code'] != 'SUCCESS') {
+        if (isset($unifiedOrder['return_code']) && $unifiedOrder['return_code'] != 'SUCCESS') {
             return ['code' => 'error', 'message' => $unifiedOrder['return_msg']];
         }
-        if ($unifiedOrder['result_code'] != 'SUCCESS') {
+        if (isset($unifiedOrder['result_code']) && $unifiedOrder['result_code'] != 'SUCCESS') {
             return ['code' => 'error', 'message' => $unifiedOrder['err_code']];
         }
 
@@ -681,6 +687,7 @@ class Wechat
 //            'mch_appid' => 'ww80960cfd3748a47f',
             'mch_appid' => $appId,
             'mchid' => trim($mchId),
+            'device_info' => uniqid(),
             'nonce_str' => Wechat::createNonceStr(),
             'partner_trade_no' => $orderNo,
             'openid' => $openid,
@@ -699,11 +706,11 @@ var_dump($unified);
         $unified['sign'] = Wechat::getPaySign($unified);
         var_dump($unified);
         PRedis::set('orders:'.$scene.':'.$openid.':unifiedSign', $unified, 600);
-        $url = !empty(self::$apiUrl['unifiedorder']) ? trim(self::$apiUrl['unifiedorder']) : 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
+        $url = !empty(self::$apiUrl['transfers']) ? trim(self::$apiUrl['transfers']) : 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
         $data = Wechat::arrayToXml($unified);
         var_dump($data);
         PRedis::set('orders:'.$scene.':'.$openid.':unifiedXml', ['data'=> $unified,'result'=> $data], 600);
-        $responseXml = Wechat::curlPost($url, trim($data));
+        $responseXml = Wechat::curlPost($url, $data, [], self::$certPaths);
         //禁止引用外部xml实体
         libxml_disable_entity_loader(true);
         $result = simplexml_load_string($responseXml, 'SimpleXMLElement', LIBXML_NOCDATA);
@@ -712,10 +719,10 @@ var_dump($unified);
         if ($result === false) {
             return ['code' => 'exception', 'message' => 'parase xml error'];
         }
-        if ($result['return_code'] != 'SUCCESS') {
+        if (isset($result['return_code']) && $result['return_code'] != 'SUCCESS') {
             return ['code' => 'error', 'message' => $result['return_msg'],'type'=>'return_code'];
         }
-        if ($result['result_code'] != 'SUCCESS') {
+        if (isset($result['result_code']) && $result['result_code'] != 'SUCCESS') {
             return ['code' => 'error', 'message' => $result['err_code'],'type'=>'result_code'];
         }
 
@@ -864,12 +871,12 @@ var_dump($unified);
      * @param array $options
      * @return mixed
      */
-    public static function curlPost($url = '', $postData = '', $options = array())
+    public static function curlPost($url = '', $postData = '', $options = array(), $cert=[])
     {
         if (is_array($postData)) {
-            echo 666;
             $postData = http_build_query($postData);
         }
+
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, $url);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
@@ -879,6 +886,17 @@ var_dump($unified);
         if (!empty($options)) {
             curl_setopt_array($ch, $options);
         }
+        var_dump($cert);
+        if($cert){
+            if(isset($cert['cert_path']) && $cert['cert_path']){
+                curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
+                curl_setopt($ch,CURLOPT_SSLCERT, $cert['cert_path']);
+            }
+            if(isset($cert['key_path']) && $cert['key_path']) {
+                curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
+                curl_setopt($ch, CURLOPT_SSLKEY, $cert['key_path']);
+            }
+        }
         //https请求 不验证证书和host
         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

+ 18 - 0
data/cert/pay_cert.pem

@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC2zCCAcMCAQAwgZUxCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAlHdWFuZ0Rvbmcx
+ETAPBgNVBAcMCFNoZW5aaGVuMRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58x
+LTArBgNVBAsMJOWNl+WugeaLvuWFieWpmuWnu+acjeWKoeaciemZkOWFrOWPuDET
+MBEGA1UEAwwKMTU2NTE0OTI1MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAKd1OS+V50Vb72wt42iPMKesl24Bc8OBrTDemxfJoXhuGqo/knV1WL+t+w1Q
+HhELqfQAxmHrsS9/WSpxjvkBf9gvykNcN35ovxuIF6pHl/HkWtucCXJdZnyKuuSk
+N/JDJWU5svJb0tdYtjUzU9G9LnEIyuLWPUobQecoEmG+OiSqe5nXGtSjIBsJuQOq
+xWyqz5yEydiqi0DyrwyNkRPLqj5tDiJ15a6c6roFWeOodTe3Hu1eXVX+KveAJN9S
+MPnjW3MqkQBJbnIOQSyex6Ybst7rQlOD+dzVeHRljX8OnXyX2OJYVweAEEHA4wA4
+4KARy79x6LGymhdqf+gqaJ3lep8CAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQBg
++wNdNtVwN+TjplowQbGlgoQYFgBsbh4UUUILz0EoafxLKIaEbCswcWxna05g58XN
+MDn+L2MDA+9X7StVonBNOO9A59cUkKGc6bjqN4LJ5gBR9nXPHPqum0u/KYKYmdoS
+j/w4gETkc8IQ3HPrO5ZlAOaE5uy3AaygLny4xtcJr0jJrrkrNOMm0uSmHOjvirYt
+68kfNxaeLx5CzhiK9c9+go2k0aqc0SM1k5FBBQTOs+IndXHkyz5wyiLHxHce77ko
+tUwZ6cGc2uupZpPg1eg+LCLUQGE/A5QBNrYYCCqBqHxlltysRkSRTdvI1IcJzt2I
+oE2FNOtmTiIW/JpyNgHb
+-----END CERTIFICATE REQUEST-----

+ 24 - 0
data/cert/pay_key.pem

@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIID8DCCAtigAwIBAgIUfqrnhvOTBT/IRi4aoKRikdGL44AwDQYJKoZIhvcNAQEL
+BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
+FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
+Q0EwHhcNMjEwMTMxMTQxOTE1WhcNMjYwMTMwMTQxOTE1WjCBgTETMBEGA1UEAwwK
+MTU2NTE0OTI1MTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMS0wKwYDVQQL
+DCTljZflroHmi77lhYnlqZrlp7vmnI3liqHmnInpmZDlhazlj7gxCzAJBgNVBAYM
+AkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAKd1OS+V50Vb72wt42iPMKesl24Bc8OBrTDemxfJoXhuGqo/knV1WL+t
++w1QHhELqfQAxmHrsS9/WSpxjvkBf9gvykNcN35ovxuIF6pHl/HkWtucCXJdZnyK
+uuSkN/JDJWU5svJb0tdYtjUzU9G9LnEIyuLWPUobQecoEmG+OiSqe5nXGtSjIBsJ
+uQOqxWyqz5yEydiqi0DyrwyNkRPLqj5tDiJ15a6c6roFWeOodTe3Hu1eXVX+KveA
+JN9SMPnjW3MqkQBJbnIOQSyex6Ybst7rQlOD+dzVeHRljX8OnXyX2OJYVweAEEHA
+4wA44KARy79x6LGymhdqf+gqaJ3lep8CAwEAAaOBgTB/MAkGA1UdEwQCMAAwCwYD
+VR0PBAQDAgTwMGUGA1UdHwReMFwwWqBYoFaGVGh0dHA6Ly9ldmNhLml0cnVzLmNv
+bS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9MUJENDIyMEU1MERCQzA0QjA2QUQzOTc1
+NDk4NDZDMDFDM0U4RUJEMjANBgkqhkiG9w0BAQsFAAOCAQEAOpkCAdNL/YPbypwX
+wDlLP2u4jNXsKQ0P7OGeuDpK8vUeOeEjf8xfkoPmvzofIeTgLAsmNM8iYKwlenbc
+dus0x1okSf4c+lupQwg/f7orZAmy9OzyVi8tnG92nn5sTrQBzOkPAgc1aqS0Lzvz
+CPcdHYmQKYL3C1lyBrbVHbM9SJSd1GsnR4zmA9XZ0yakqidILKjDstMBw7mhDkUs
+bH/LmElB5zvrKHPLCyZD9GW67obuJ+RinluXg+qb9T21g1Rdlqb2e/W2PVZ3PQrX
+amNyhXpE6WmYw9tl/m57CqLuJ25s9mqxJ+fzdSMDdORVaRXuTfKckMeQPLqqOfoj
+cE0GKQ==
+-----END CERTIFICATE-----