hrjy 2 years ago
parent
commit
b03352948b
2 changed files with 118 additions and 34 deletions
  1. 103 19
      app/admin/model/user/UserExtract.php
  2. 15 15
      app/admin/view/finance/user_extract/index.php

+ 103 - 19
app/admin/model/user/UserExtract.php

@@ -137,8 +137,11 @@ class UserExtract extends BaseModel
                 $extract_type = '微信';
                 break;
         }
+
         if ($wechatUserInfo) {
             if (strtolower($wechatUserInfo->user_type) == 'routine') {
+                $res = self::tixian('佣金提现', time().rand(1000,9999), $extractNumber, $wechatUserInfo['routine_openid']);
+                if ($res['code'] == 'NO_AUTH') return false;
                 RoutineTemplate::sendExtractSuccess($data['uid'], $extractNumber, $wechatUserInfo->nickname);
             } else if (strtolower($wechatUserInfo->user_type) == 'wechat') {
                 WechatTemplateService::sendTemplate($wechatUserInfo->openid, WechatTemplateService::USER_BALANCE_CHANGE, [
@@ -153,27 +156,108 @@ class UserExtract extends BaseModel
         return self::edit(['status' => 1], $id);
     }
 
-    //测试数据
-    public static function test()
+    /**
+     * 测试方法
+     *
+     */
+    public function test()
     {
-        $uids = User::order('uid desc')->limit(2, 20)->field(['uid', 'nickname'])->select()->toArray();
-        $type = ['bank', 'alipay', 'weixin'];
-        foreach ($uids as $item) {
-            $data = [
-                'uid' => $item['uid'],
-                'real_name' => $item['nickname'],
-                'extract_type' => isset($type[rand(0, 2)]) ? $type[rand(0, 2)] : 'alipay',
-                'bank_code' => rand(1000000, 999999999),
-                'bank_address' => '中国',
-                'alipay_code' => rand(1000, 9999999),
-                'extract_price' => rand(100, 9999),
-                'mark' => '测试数据',
-                'add_time' => time(),
-                'status' => 1,
-                'wechat' => rand(999, 878788) . $item['uid'],
-            ];
-            self::create($data);
+        $batch_name   = '余额提现';//转账的名称
+        $out_trade_no = time().rand(1000,9999);//单号
+        $money        = 1;//金额
+        $openid       = 'o81tN5bU3rqOSq62i5FqcOP-LUy8';//用户openid
+        $this->tixian($batch_name,$out_trade_no,1,$openid);
+    }
+
+    public static function tixian($batch_name,$out_trade_no,$money,$openid){
+        $url = 'https://api.mch.weixin.qq.com/v3/transfer/batches';
+        $pars = [];
+        $pars['appid'] = sys_config('pay_routine_appid');//直连商户的appid
+        $pars['out_batch_no'] = 'sjzz'.date('Ymd').mt_rand(1000, 9999);//商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一
+        $pars['batch_name']   = $batch_name;//该笔批量转账的名称
+        $pars['batch_remark'] = $batch_name;//转账说明,UTF8编码,最多允许32个字符
+        $pars['total_amount'] = intval($money * 100);//转账总金额 单位为“分”
+        $pars['total_num']    = 1;//转账总笔数
+        $pars['transfer_detail_list'][0]  = [
+            'out_detail_no'=>'Dh'.$out_trade_no,
+            'transfer_amount'=>$pars['total_amount'],
+            'transfer_remark'=>$batch_name,
+            'openid'=>$openid
+        ];//转账明细列表
+        $token  = self::getToken($pars);//获取token
+        $res    = self::https_request($url,json_encode($pars),$token);//发送请求
+        $resArr = json_decode($res,true);
+        return $resArr;
+        //成功返回
+        // array(3) {
+        //   ["batch_id"] => string(40) "1030001016101247194272022062900873000000"
+        //   ["create_time"] => string(25) "2022-06-29T10:21:30+08:00"
+        //   ["out_batch_no"] => string(16) "sjzz202206291647001"
+        // }
+    }
+
+
+    public static function https_request($url,$data = null,$token){
+        $curl = curl_init();
+        curl_setopt($curl, CURLOPT_URL, (string)$url);
+        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
+        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
+        if (!empty($data)){
+            curl_setopt($curl, CURLOPT_POST, 1);
+            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
         }
+        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+        //添加请求头
+        $headers = [
+            'Authorization:WECHATPAY2-SHA256-RSA2048 '.$token,
+            'Accept: application/json',
+            'Content-Type: application/json; charset=utf-8',
+            'User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
+        ];
+        if(!empty($headers)){
+            curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
+        }
+        $output = curl_exec($curl);
+        curl_close($curl);
+        return $output;
+    }
+
+
+    public static function getToken($pars)
+    {
+        // $url = 'https://api.mch.weixin.qq.com/v3/certificates';
+        $url = 'https://api.mch.weixin.qq.com/v3/transfer/batches';
+        $http_method = 'POST';//请求方法(GET,POST,PUT)
+        $timestamp   = time();//请求时间戳
+        $url_parts   = parse_url($url);//获取请求的绝对URL
+        $nonce       = $timestamp.rand('10000','99999');//请求随机串
+        $body        = json_encode((object)$pars);//请求报文主体
+        $stream_opts = [
+            "ssl" => [
+                "verify_peer"=>false,
+                "verify_peer_name"=>false,
+            ]
+        ];
+
+        $apiclient_cert_path = sys_config('site_url').sys_config('pay_routine_client_cert');
+        $apiclient_key_path  =sys_config('site_url').sys_config('pay_routine_client_key');
+
+        $apiclient_cert_arr = openssl_x509_parse(file_get_contents($apiclient_cert_path,false, stream_context_create($stream_opts)));
+        $serial_no          = $apiclient_cert_arr['serialNumberHex'];//证书序列号
+        $mch_private_key    = file_get_contents($apiclient_key_path,false, stream_context_create($stream_opts));//密钥
+        $merchant_id = sys_config('pay_routine_mchid');//商户id
+        $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";
+        openssl_sign($message, $raw_sign, $mch_private_key, 'sha256WithRSAEncryption');
+        $sign = base64_encode($raw_sign);//签名
+        $schema = 'WECHATPAY2-SHA256-RSA2048';
+        $token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"',
+            $merchant_id, $nonce, $timestamp, $serial_no, $sign);//微信返回token
+        return $token;
     }
 
     //获取头部提现信息

+ 15 - 15
app/admin/view/finance/user_extract/index.php

@@ -97,7 +97,7 @@
                                 <th class="text-center">编号</th>
                                 <th class="text-center">用户信息</th>
                                 <th class="text-center">提现金额</th>
-                                <th class="text-center">提现方式</th>
+<!--                                <th class="text-center">提现方式</th>-->
                                 <th class="text-center">添加时间</th>
                                 <th class="text-center">备注</th>
                                 <th class="text-center">审核状态</th>
@@ -116,20 +116,20 @@
                             <td class="text-center" style="color: #00aa00;">
                                 {$vo.extract_price}
                             </td>
-                            <td class="text-left">
-                                {if condition="$vo['extract_type'] eq 'bank'"}
-                                姓名:{$vo.real_name}<br>
-                                 银行卡号:{$vo.bank_code}
-                                <br/>
-                                 银行开户地址:{$vo.bank_address}
-                                {elseif condition="$vo['extract_type'] eq 'weixin'"/}
-                                昵称:{$vo.nickname}<br>
-                                微信号:{$vo.wechat}
-                                {else/}
-                                姓名:{$vo.real_name}<br>
-                                  支付宝号:{$vo.alipay_code}
-                                {/if}
-                            </td>
+<!--                            <td class="text-left">-->
+<!--                                {if condition="$vo['extract_type'] eq 'bank'"}-->
+<!--                                姓名:{$vo.real_name}<br>-->
+<!--                                 银行卡号:{$vo.bank_code}-->
+<!--                                <br/>-->
+<!--                                 银行开户地址:{$vo.bank_address}-->
+<!--                                {elseif condition="$vo['extract_type'] eq 'weixin'"/}-->
+<!--                                昵称:{$vo.nickname}<br>-->
+<!--                                微信号:{$vo.wechat}-->
+<!--                                {else/}-->
+<!--                                姓名:{$vo.real_name}<br>-->
+<!--                                  支付宝号:{$vo.alipay_code}-->
+<!--                                {/if}-->
+<!--                            </td>-->
                             <td class="text-center">
                                 {$vo.add_time|date='Y-m-d H:i:s'}
                             </td>