public function alipay($pay_order_no = '20241114123331000000195475', $uid = 1, $url = '')
{
$info = Db::name('vip_order')->where(array('orderid' => $pay_order_no))->find(); if (!$info) {
$this->error('订单异常,请重试');
} // $total_amount = '0.01'; // $total_amount = $info['payamount']; $requestConfigs = [ 'out_trade_no' => $pay_order_no, //单位 元 'total_amount' => $total_amount, //订单标题 'subject' => $info['title'], //该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。 'timeout_express' => '2h' ];
$method = 'alipay.trade.precreate';
$commonConfigs = array( //公共参数 'app_id' => self::$aliconfig['appId'], 'method' => $method, //接口名称 'format' => 'JSON', 'charset' => $this->charset, 'sign_type' => 'RSA2', 'timestamp' => date('Y-m-d H:i:s'), 'version' => '1.0', 'notify_url' => request()->domain() . '/api/pay/' . $url, 'return_url' => 'https://www.qiuyutv.com/', 'biz_content' => json_encode($requestConfigs),
);
$commonConfigs["sign"] = $this->generateSign($commonConfigs, $commonConfigs['sign_type']);
$result = $this->curlPost('https://openapi.alipay.com/gateway.do', $commonConfigs);
$result = json_decode($result, 1);
$result = $result['alipay_trade_precreate_response']; if ($result['code'] && $result['code'] == '10000') { require_once ROOT_PATH . '/public/phpqrcode/phpqrcode.php';
$imageName = "p_" . date("His", time()) . "_" . rand(1111, 9999) . '.jpg';
$path = "upload/qrcode/" . date("Ymd"); if (!is_dir($path)) { //判断目录是否存在 不存在就创建 mkdir($path, 0777, true); chmod($path, 0777);
}
$imageSrc = $path . '/' . $imageName;
$msg1 = \QRcode::png($result['qr_code'], $imageSrc, 'L', 10, 1); // 生成二维码并保存为文件 return $imageSrc;
} else {
$this->error('error', $result['msg'] . ' : ' . $result['sub_msg']);
}
} /** * 签名 */ public function sign($data, $signType = "RSA")
{
$priKey = self::$aliconfig['rsaPrivateKey'];
$res = "-----BEGIN RSA PRIVATE KEY-----\n" . wordwrap($priKey, 64, "\n", true) . "\n-----END RSA PRIVATE KEY-----";
($res) or die('您使用的私钥格式错误,请检查RSA私钥配置'); if ("RSA2" == $signType) { openssl_sign($data, $sign, $res, OPENSSL_ALGO_SHA256); //OPENSSL_ALGO_SHA256是php5.4.8以上版本才支持 } else { openssl_sign($data, $sign, $res);
}
$sign = base64_encode($sign); return $sign;
} /** * 获取签名 */ public function generateSign($params, $signType = "RSA")
{ return $this->sign($this->getSignContent($params), $signType);
} /** * 校验是否非空 **/ protected function checkEmpty($value)
{ if (!isset($value)) return true; if ($value === null) return true; if (trim($value) === "") return true; return false;
} /** * 获取签名内容 */ public function getSignContent($params)
{ ksort($params);
$stringToBeSigned = "";
$i = 0; foreach ($params as $k => $v) { if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) { // 转换成目标字符集 $v = $this->characet($v, $this->charset); if ($i == 0) {
$stringToBeSigned .= "$k" . "=" . "$v";
} else {
$stringToBeSigned .= "&" . "$k" . "=" . "$v";
}
$i++;
}
} unset($k, $v); return $stringToBeSigned;
} /** * 转换字符集编码 */ function characet($data, $targetCharset)
{ if (!empty($data)) {
$fileType = $this->charset; if (strcasecmp($fileType, $targetCharset) != 0) {
$data = mb_convert_encoding($data, $targetCharset, $fileType); //$data = iconv($fileType, $targetCharset.'//IGNORE', $data); }
} return $data;
} /** * 发送支付请求 */ public function curlPost($url = '', $postData = '', $options = array())
{ if (is_array($postData)) {
$postData = http_build_query($postData);
}
$ch = curl_init();
$params[CURLOPT_URL] = $url; //请求url地址 $params[CURLOPT_HEADER] = false; //是否返回响应头信息 $params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回 $params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向 $params[CURLOPT_POST] = true;
$params[CURLOPT_HTTPHEADER] = array('content-type: application/x-www-form-urlencoded;charset=' . $this->charset);
$params[CURLOPT_SSL_VERIFYPEER] = false; //禁用证书校验 $params[CURLOPT_SSL_VERIFYHOST] = false;
$params[CURLOPT_POSTFIELDS] = $postData; curl_setopt_array($ch, $params); //传入curl参数 $content = curl_exec($ch); //执行 curl_close($ch); //关闭连接 return $content;
}