Browse Source

支付调通

1557492053 1 year ago
parent
commit
10e17dbe6c

+ 4 - 4
application/admin/controller/massager/Closing.php

@@ -162,7 +162,7 @@ class Closing extends Backend
                             "createtime" => time(),
                             "city_code" => $order["city_code"]
                         ]);
-                        array_push($m_bills, [
+                        $m_bills[] = [
                             "massager_id" => $massager["id"],
                             "currency_type" => \E_USER_BILL_CURRENCY_TYPE::Money,
                             "change_type" => \E_M_BILL_CHANGE_TYPE::ClosingIncome,
@@ -172,7 +172,7 @@ class Closing extends Backend
                             "reason" => "业绩结算",
                             "relation_no" => $order["no"],
                             "createtime" => time()
-                        ]);
+                        ];
                         $agency_profit_amount -= $order["bill"]["diff_amount"];
                         $m_profit_amount += $order["bill"]["diff_amount"];
                     }
@@ -212,7 +212,7 @@ class Closing extends Backend
                             "createtime" => time(),
                             "city_code" => $order["city_code"]
                         ]);
-                        array_push($m_bills, [
+                        $m_bills[] = [
                             "massager_id" => $massager["id"],
                             "currency_type" => \E_USER_BILL_CURRENCY_TYPE::Money,
                             "change_type" => \E_M_BILL_CHANGE_TYPE::ClosingIncome,
@@ -222,7 +222,7 @@ class Closing extends Backend
                             "reason" => "业绩结算",
                             "relation_no" => $order["no"],
                             "createtime" => time()
-                        ]);
+                        ];
                         $platform_profit_amount -= $order["bill"]["diff_amount"];
                         $m_profit_amount += $order["bill"]["diff_amount"];
                     }

+ 8 - 8
application/api/controller/AgencyAction.php

@@ -104,8 +104,8 @@ class AgencyAction extends AgencyBaseApi
         ]))->checkBody();
         $r = $this->service->fetchTodayPerformance(
             $this->admin,
-            isset($params["city_code"]) ? $params["city_code"] : null,
-            isset($params["store_id"]) ? $params["store_id"] : null
+            $params["city_code"] ?? null,
+            $params["store_id"] ?? null
         );
         $r->code() ? $this->success($r->data()) : $this->error($r->msg());
     }
@@ -121,8 +121,8 @@ class AgencyAction extends AgencyBaseApi
         ]))->checkBody();
         $paginate = $this->service->fetchOrders(
             $this->admin,
-            isset($params["city_code"]) ? $params["city_code"] : null,
-            isset($params["store_id"]) ? $params["store_id"] : null,
+            $params["city_code"] ?? null,
+            $params["store_id"] ?? null,
             $params["page"],
             $params["size"]
         );
@@ -143,8 +143,8 @@ class AgencyAction extends AgencyBaseApi
         ]))->checkBody();
         $paginate = $this->service->fetchBill(
             $this->admin,
-            isset($params["city_code"]) ? $params["city_code"] : null,
-            isset($params["store_id"]) ? $params["store_id"] : null,
+            $params["city_code"] ?? null,
+            $params["store_id"] ?? null,
             $params["page"],
             $params["size"]
         );
@@ -164,8 +164,8 @@ class AgencyAction extends AgencyBaseApi
         ]))->checkBody();
         $paginate = $this->service->fetchMassger(
             $this->admin,
-            isset($params["city_code"]) ? $params["city_code"] : null,
-            isset($params["store_id"]) ? $params["store_id"] : null,
+            $params["city_code"] ?? null,
+            $params["store_id"] ?? null,
             $params["page"],
             $params["size"]
         );

+ 0 - 1
application/api/controller/Store.php

@@ -12,7 +12,6 @@ class Store extends Api
 {
     protected $noNeedLogin = ['fetch', "apply"];
 
-
     private $service;
 
     public function __construct(Request $request = null)

+ 63 - 61
application/api/controller/Test.php

@@ -2,21 +2,8 @@
 
 namespace app\api\controller;
 
-use addons\fastchat\library\Chat;
-use alisdk\AliPay;
-use app\admin\model\system\GrantVoucher;
-use app\api\model\massager\Work;
-use app\api\model\order\Order;
-use app\api\service\BDService;
-use app\api\service\CallbackService;
-use app\api\service\MassagerService;
-use app\api\service\ProfitService;
-use app\api\service\StoreService;
-use app\api\service\TencentCloudService;
 use app\api\service\WxService;
-use app\api\validate\BaseApiValidate;
 use app\common\controller\Api;
-use redis\RedLock;
 
 
 class Test extends Api
@@ -24,46 +11,54 @@ class Test extends Api
 
     protected $noNeedLogin = ["*"];
 
-    function test1() {
-        $order = (new Order())->get(1387);
-        $res = (new ProfitService())->profit($order, db("user")->where("id", $order["user_id"])->find());
-        if($res->code()) {
-            $this->success($res->msg());
-        } else {
-            $this->success($res->data());
-        }
+    function payment()
+    {
+        $service = (new WxService);
+        $SR = $service->appletPay("oQ_977SN3KhBetHY9OPckGP9DNNc", self::getRandomStr(20), "sbsbsb", 0.01);
+        $SR->code() ? $this->success($SR->data()) : $this->error($SR->msg());
+    }
+
+
+    function test1()
+    {
+        self::certificates();
     }
+
     /**
      * 获取证书
      * @return mixed
      */
-    public static function certificates(){
+    public static function certificates()
+    {
         //请求参数(报文主体)
-        $headers = self::sign('GET','https://api.mch.weixin.qq.com/v3/certificates','');
-        $result = self::curl_get('https://api.mch.weixin.qq.com/v3/certificates',$headers);
-        $result = json_decode($result,true);
-        $aa = self::decryptToString($result['data'][0]['encrypt_certificate']['associated_data'],$result['data'][0]['encrypt_certificate']['nonce'],$result['data'][0]['encrypt_certificate']['ciphertext']);
+        $headers = self::sign('GET', 'https://api.mch.weixin.qq.com/v3/certificates', '');
+        $result = self::curl_get('https://api.mch.weixin.qq.com/v3/certificates', $headers);
+        $result = json_decode($result, true);
+        dump($result);//解密后的内容,就是证书内容
+        $aa = self::decryptToString($result['data'][0]['encrypt_certificate']['associated_data'], $result['data'][0]['encrypt_certificate']['nonce'], $result['data'][0]['encrypt_certificate']['ciphertext']);
         var_dump($aa);//解密后的内容,就是证书内容
     }
+
     /**
      * 签名
-     * @param string $http_method    请求方式GET|POST
-     * @param string $url            url
-     * @param string $body           报文主体
+     * @param string $http_method 请求方式GET|POST
+     * @param string $url url
+     * @param string $body 报文主体
      * @return array
      */
-    public static function sign($http_method = 'POST',$url = '',$body = ''){
+    public static function sign($http_method = 'POST', $url = '', $body = '')
+    {
         $mch_private_key = self::getMchKey();//私钥
         $timestamp = time();//时间戳
         $nonce = self::getRandomStr(32);//随机串
         $url_parts = parse_url($url);
         $canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : ""));
         //构造签名串
-        $message = $http_method."\n".
-            $canonical_url."\n".
-            $timestamp."\n".
-            $nonce."\n".
-            $body."\n";//报文主体
+        $message = $http_method . "\n" .
+            $canonical_url . "\n" .
+            $timestamp . "\n" .
+            $nonce . "\n" .
+            $body . "\n";//报文主体
         //计算签名值
         openssl_sign($message, $raw_sign, $mch_private_key, 'sha256WithRSAEncryption');
         $sign = base64_encode($raw_sign);
@@ -71,27 +66,29 @@ class Test extends Api
         $config = self::config();
         $token = sprintf('WECHATPAY2-SHA256-RSA2048 mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"',
             $config['mchid'], $nonce, $timestamp, $config['serial_no'], $sign);
-        $headers = [
+        return [
             'Accept: application/json',
             'User-Agent: */*',
             'Content-Type: application/json; charset=utf-8',
-            'Authorization: '.$token,
+            'Authorization: ' . $token,
         ];
-        return $headers;
     }
+
     //私钥
-    public static function getMchKey(){
-        var_dump(file_get_contents("file:///www/wwwroot/pool_ball_baby_server/certificate/wx/apiclient_key.pem"));
+    public static function getMchKey()
+    {
         //path->私钥文件存放路径
-        return openssl_get_privatekey(file_get_contents("file:///www/wwwroot/pool_ball_baby_server/certificate/wx/apiclient_key.pem"));
+        return openssl_get_privatekey(file_get_contents("file://D:/project_c/billiards-server/certificate/wx/apiclient_key.pem"));
     }
+
     /**
      * 获得随机字符串
      * @param $len      integer       需要的长度
      * @param $special  bool      是否需要特殊符号
      * @return string       返回随机字符串
      */
-    public static function getRandomStr($len, $special=false){
+    public static function getRandomStr($len, $special = false)
+    {
         $chars = array(
             "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
             "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
@@ -101,7 +98,7 @@ class Test extends Api
             "3", "4", "5", "6", "7", "8", "9"
         );
 
-        if($special){
+        if ($special) {
             $chars = array_merge($chars, array(
                 "!", "@", "#", "$", "?", "|", "{", "/", ":", ";",
                 "%", "^", "&", "*", "(", ")", "-", "_", "[", "]",
@@ -112,36 +109,39 @@ class Test extends Api
         $charsLen = count($chars) - 1;
         shuffle($chars);                            //打乱数组顺序
         $str = '';
-        for($i=0; $i<$len; $i++){
+        for ($i = 0; $i < $len; $i++) {
             $str .= $chars[mt_rand(0, $charsLen)];    //随机取出一位
         }
         return $str;
     }
+
     /**
      * 配置
      */
-    public static function config(){
+    public static function config()
+    {
         return [
             'appid' => '',
-            'mchid' => '1651873606',//商户号
-            'serial_no' => '4C24C6C4B0F88FAB756AA175D720D87A32B6BF23',//证书序列号
+            'mchid' => '1638097896',//商户号
+            'serial_no' => '13A336433257E2C58CB5A6BC469B7040EF7E7456',//证书序列号
             'description' => '',//应用名称(随意)
             'notify' => '',//支付回调
         ];
     }
+
 //get请求
-    public static function curl_get($url,$headers=array())
+    public static function curl_get($url, $headers = array())
     {
         $info = curl_init();
-        curl_setopt($info,CURLOPT_RETURNTRANSFER,true);
-        curl_setopt($info,CURLOPT_HEADER,0);
-        curl_setopt($info,CURLOPT_NOBODY,0);
-        curl_setopt($info,CURLOPT_SSL_VERIFYPEER,false);
-        curl_setopt($info,CURLOPT_SSL_VERIFYPEER,false);
-        curl_setopt($info,CURLOPT_SSL_VERIFYHOST,false);
+        curl_setopt($info, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($info, CURLOPT_HEADER, 0);
+        curl_setopt($info, CURLOPT_NOBODY, 0);
+        curl_setopt($info, CURLOPT_SSL_VERIFYPEER, false);
+        curl_setopt($info, CURLOPT_SSL_VERIFYPEER, false);
+        curl_setopt($info, CURLOPT_SSL_VERIFYHOST, false);
         //设置header头
-        curl_setopt($info, CURLOPT_HTTPHEADER,$headers);
-        curl_setopt($info,CURLOPT_URL,$url);
+        curl_setopt($info, CURLOPT_HTTPHEADER, $headers);
+        curl_setopt($info, CURLOPT_URL, $url);
         $output = curl_exec($info);
         curl_close($info);
         return $output;
@@ -149,17 +149,19 @@ class Test extends Api
 
     const KEY_LENGTH_BYTE = 32;
     const AUTH_TAG_LENGTH_BYTE = 16;
+
     /**
      * Decrypt AEAD_AES_256_GCM ciphertext
      *
-     * @param string    $associatedData     AES GCM additional authentication data
-     * @param string    $nonceStr           AES GCM nonce
-     * @param string    $ciphertext         AES GCM cipher text
+     * @param string $associatedData AES GCM additional authentication data
+     * @param string $nonceStr AES GCM nonce
+     * @param string $ciphertext AES GCM cipher text
      *
      * @return string|bool      Decrypted string on success or FALSE on failure
      */
-    public static function decryptToString($associatedData, $nonceStr, $ciphertext) {
-        $aesKey = '8b70e85dd34b80b2e519eacd7a1abfd8';
+    public static function decryptToString($associatedData, $nonceStr, $ciphertext)
+    {
+        $aesKey = '5a523a148c428bf8c4af91000fc307a6';
         $ciphertext = \base64_decode($ciphertext);
         if (strlen($ciphertext) <= self::AUTH_TAG_LENGTH_BYTE) {
             return false;

+ 1 - 1
application/api/service/WxService.php

@@ -42,7 +42,7 @@ class WxService extends BaseService
         return [
             "mch_id" => Env::get("wxpay.wx_mch_id") ?? "",
             "mch_v3_api" => Env::get("wxpay.wx_mch_v3_api") ?? "",
-            "mch_certificate_serial" => Env::get("site.wx_mch_certificate_serial") ?? "",
+            "mch_certificate_serial" => Env::get("wxpay.wx_mch_certificate_serial") ?? "",
             "mch_private_key_file_path" => ROOT_PATH . "certificate" . DS . "wx" . DS . "apiclient_key.pem",
             "platform_certificate_file_path" => ROOT_PATH . "certificate" . DS . "wx" . DS . "apiclient_cert.pem"
         ];

File diff suppressed because it is too large
+ 2 - 23
certificate/wx/apiclient_cert.pem


+ 26 - 26
certificate/wx/apiclient_key.pem

@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDYatODd3LXYX7i
-BEzVDpqSsQ6VB7GoHpdz0eJMa1j9tpUIPdkXfpOnrKN8cZ5K/N/C6nwdWnbwrdXz
-PChclWS9S6+9Ld+rHGtmB1a6Bfa0Uonir/cFnAAby8sVVDy6apQcZHtlfGeVQNc/
-XiJ3pz8RDTn77k7OX/2KQvL+pCNp2zI18Hy6MIO3J80k//dy40kmXqopO6OWu830
-YGWYNNgdyg4RpR3niZbXd365j/wnUWcF92w0/e4qRIgz9hDqmF+mWCBQNNcTAHWX
-mCKhUAGTIjXll7rrpY+UU9+GPWgfilie6adPSLgCRFiqE6Oo5v52qTGRq7lkYZWZ
-d4w9Fg9tAgMBAAECggEBALV4TkgM30VvQV/wTyTQjBi5UwrwWq4oiMLbmbCOyx5j
-/W/dvK4Qu2t8PdJZy2wBwvfEe7J5awbCHYdKSGXp94Erd/9f+g+XUw9I1BZEbewi
-0fA9sRsJBqZIKtCFxC5ktDFiqH4e5RSoPFWsb6Z5nU6FErwHxhkTMJzBKtUPeYqG
-cVtxYpKQfREW3gD2zCbByscQRNiepgi4aSh+5EIvNsY4SB8st5NrR2ANxuic0mmc
-jGGDQZ2HXsHpztkV2cu9teBIX8HGgwc8XlNSE9/RRAxkIZG+GM9MqL81lR9gH8ja
-xBT/iXTpx8XxTK7dcXJQWo63mHC82wI7GUfRoRwquAECgYEA++HDg7VDUo+YcK7o
-jA4eoDc4Hz1DsNJ0kC6vbiyvGj0fr9+B9fmt+okNwdntJ0xJqlUNPzUENlRVClyA
-6mL+zof0XxJska039hSlMBJ5wsZ5b7Zo0jrDysZyAisq99Lor3wLGgUgph3Kcymp
-YyDVpN+08J99/qaeOo7quC54om0CgYEA2/SgqQ/ecfIz2H0Jw9wIrOFsAn/zcfka
-WmYXK09eiCP02HRbmn0oJ4W0EDrb4h7tXGtgDprFWLkUGBQWsRxkjjsCjTcVDDr5
-lNuica2RZ0rPHQJJZ1HL2I5/fHSo4d4aTPcjPkCg//VyT0Qf+fdxVnapPPKQW/I8
-PDKznpkHAQECgYAuShMwRUOWDKWrL7m043NlZkB+HTgvar3ZMXsz+CpF3C3SmHS9
-y6DZhg5tLauTqUVwdCj3ELsxcNYgDVfzuzWwpvOV9UDWlMrQAoNJDlwqG2d9zDv/
-RqVswoN5Oo2u9aeleFph8cdKP/dQqrtiaEpa/nG2NtlkzyINCO7B4mhxEQKBgQCt
-lvC8vGNoNigosPXl9195YSanCmgNCPV9Zpjee3M1qnrv4VTyJdhs6J5lOK6UVKgr
-iipzHD6neNmc7y3BdZD+lx+6Z0BbOKgEjRo08TCR/n5afJWFzw47yKpghIlMSMck
-+t57oPHvT7x5RmCeHGT8QgXqrdy0VAap07Hidw8KAQKBgQDKAA8YVEz5ZJjhlv4x
-ACyYWdjlwXDtnpN5OGxInocKMnfXya+1tVrGDTSHzptyTN5yuS3cpDC/4s3w6YN5
-AC1dtoJpOCJ6EeXcrHxiO1evj3nk+XAqcMHDb6TKYYK5wCzxu9TdfLOKyMpmySNF
-3Ff84KSjuKwKLlHLdLh/2Fe89A==
+MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQDR5p+yVKpuKoWM
+UZfxT60te1GqMGdoLG0BlEfsNU9Msd1/sD7K0y1yv34uMHetTPqexHKj6Du9nTMz
+1dbUU+MDx6TeNJ446lufzAwWt67gvMMg6FHDrDipgZ1RjNxXq+4EKNIXiaUKgrcB
+1lvH6aFoWfMB3Xi8CTH0HYAGDx2xsWTm2NsnSy17o0qqUXlFOHzmuYGX8ToNWsDV
+rvvIfUHUwdWnzbOQxckIiF6mse05lQm3bsBsLpsv2F492uv9ypFmqne9QjrfmrBB
+0C1K40N3YSDwjf+8w11ZIQ0n7OfOBZJY7a4u2KfPSOKDW7IvgnX9hXhdo98EnT5B
+jYV2SxNRAgMBAAECggEBALuIWlvg6xhcY08XwzH1JtuA11i/wFPBhW6oxY2Tn5L9
+QtGHbMKX5H4l+p1X7kTmhu/8whQRM/bYEVwZjMPNYwEIiROCXW6qbEwb6R0O5W6j
+F486IXs6TrGbPSwUNvUZhiEvO22OK+d1G/7HPt8grHXoD4Y2El2ltXzOMoi3Tqdn
+IBUa+A+fJEghI9ZtzrgbJ06gmKhGy7Q3iNY2pN1b8r3c88qRU8W2t4TXlBewspFA
+SJnhTYIrgpwWuxU5FAM5n/sdoqnH0wfO5TWki9By9okStY44rxZj6WU2iamW7sjq
+MEseB1fB2nEfSP+Z+B1TD6eq0b1YShIISsSITeKlroUCgYEA+13+HC+nf8P1F0fy
+o3gMga2eInPP2tGyagkkCvqbXw34u3zLnDpGEy1Holx11z7u/urehT0vrL6D4NdP
+6Yx2yijUTXWKcx05GRXafxIg82v7Urm2GLydLy7OThwgcAgJGk4ErrBcRMHoE1Uw
+l+YMpFeEc/MlQiwdtJpiBQAg8l8CgYEA1cT73SvxJxp/OzdyV8V+tETj4kzwCGlj
+hrbKFi5tlT4Mms1HRh6HhbZ2DtoHpUrpkwvc+jq/euBkqDrcTs8X0psVCpkZIWb4
+Mkhx7fH4ob3W/OZfqeZqOFI5LuATNPj9x5Zf5T2ShaPeBqL7g3coH0+2yA3QhJZ8
+jWwrA8GUuE8CgYEAn2Ffh9unZtmHA7X44TFzLJ47EDlCZ8piR9133wY7ka+4MJjW
+OT6xw+MH8qiRh2M+AqBFa1H6cptx3xRmdP09LL1qr5qBqK+0znUOz1ddUTr8Zd2e
+2lxthcc1xE0NPDu8GdOyIFluh6IzVl7DquyQw3tCXoqi6ywxwZvJ3sXQHh0CgYEA
+tmuQ2t6CvfHYnTnls4zvYPpg1V7+fs8ghXc64M7h6Le4nemLZwTqdWqNOINKfv18
+cWVwP4EeoccXXpBMLFyBYdHBlPetAFoUdyRnRLx2hd+wtMQK4ruj7UgNUDkbatsI
+BegHEWMHxE9gSp2OsFNgw8eMnQ9c36hjxXOHCX+KX/UCgYEAilO8nlon9EQN67x8
+ybWYoNQJiVMbk03GOpfDAjIFs8qnY0Qst+fBZFBiNd1+/iFAKYUZpab6DXRclxeZ
+GX63t0xr0VB/uoWneQIQIJeEl8P0dKXqCQ+Z5+1nySXVIeoj6NEo8OhYUni1nfKZ
+VCfRfPWjvhZUzsKRPFaKdVjLSA8=
 -----END PRIVATE KEY-----