'测试', 'zfbsm' => '支付宝扫码', 'zfbge' => '支付宝固额', 'zfbzk' => '支付宝转卡', 'ylsm' => '银联扫码', 'szrmb' => '数字人民币', 'sdjt' => '手动金条', ]; public static $PRODUCT = [ // 'T888' => [ // 'type' => 'test', // 'rate' => 0.02, // 'max' => 5000, // 'min' => 10 // ], 'YL001' => [ 'type' => 'ylsm', 'rate' => 0.05, 'max' => 500, 'min' => 50 ], 'SZ002' => [ 'type' => 'szrmb', 'rate' => 0.05, 'max' => 100, 'min' => 10 ], 'SZ001' => [ 'type' => 'szrmb', 'rate' => 0.048, 'max' => 5000, 'min' => 100 ], 'ZFB001' => [ 'type' => 'zfbsm', 'rate' => 0.085, 'max' => 200, 'min' => 100 ], 'ZFB002' => [ 'type' => 'zfbsm', 'rate' => 0.057, 'max' => 1000, 'min' => 200 ], 'ZFB003' => [ 'type' => 'zfbsm', 'rate' => 0.052, 'max' => 3000, 'min' => 1000 ], 'ZFB004' => [ 'type' => 'zfbsm', 'rate' => 0.042, 'max' => 20000, 'min' => 3000 ], 'ZFB005' => [ 'type' => 'zfbge', 'rate' => 0.027, 'fixed' => [945 ,988 ,990] ], 'ZFBZK001' => [ 'type' => 'zfbzk', 'rate' => 0.05, 'max' => 2000, 'min' => 200 ], 'JT000' => [ 'type' => 'sdjt', 'rate' => 0.08, 'max' => 300, 'min' => 100 ], 'JT001' => [ 'type' => 'sdjt', 'rate' => 0.08, 'max' => 3000, 'min' => 300 ], 'JT002' => [ 'type' => 'sdjt', 'rate' => 0.08, 'max' => 5000, 'min' => 500 ], ]; // 获取商户ID public static function getMerchantId() { return config('app.tree_pay_mch_id'); } // 获取商户秘钥 public static function getSecret() { return config('app.tree_pay_key'); } // 获取异步的通知地址 public static function getNotifyUrl() { $host = config('app.url'); return $host.'/api/pay/harvest'; } /** * @description: 获取请求客户端 * @return {*} */ public static function getClient(): Client { return new Client([ 'base_uri' => self::REQUEST_URL, 'timeout' => 5.0, ]); } // 签名 public static function signature($params = [],$must = []) { if($must){ foreach($params as $k => $v){ if(!in_array($k,$must)){ unset($params[$k]); } } } ksort($params, SORT_STRING); $parts = []; foreach($params as $k => $v){ array_push($parts,$k.'='.$v); } $mch_key = self::getSecret(); $parts[] = "key=".$mch_key; $sign = md5(implode('&',$parts)); return $sign; } /** * @description: 发起支付订单 * @param {*} $amount 金额单位分 * @param {*} $orderNo 订单号 * @param {*} $type 支付通道 * @return {*} */ public static function pay($amount,$orderNo,$type = self::PRODUCT_TEST) { $must = ['mchId','productId','outTradeNo','amount','reqTime','notifyUrl']; $mch_id = self::getMerchantId(); $data = []; $data['mchId'] = $mch_id; $data['amount'] = $amount; $data['outTradeNo'] = $orderNo; $data['notifyUrl'] = self::getNotifyUrl(); $data['reqTime'] = time() * 1000; $data['productId'] = $type; $data['sign'] = self::signature($data,$must); $client = self::getClient(); $response = $client->post('api/v1/pay/unifiedOrder', [ 'json' => $data, 'headers' => [ 'Content-Type' => 'application/json', ] ]); $body = $response->getBody(); return json_decode($body->getContents(), true); } }