支付宝生成支付二维码

admin5个月前Thinkphp230
    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'], //该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m15dm-分钟,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_SHA256php5.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;
    }

相关文章

微信公众号h5登录

public function getCode(){    $order_id = '95896766';    $config = confi...

微信卡卷html 领取的签名

/* * 创建签名 */public function sign(){    $cardId = 'p7YU46qidv5_baigH0Ds4ObP7MDg'; &...

fastadmin上传图片并压缩并加水印

public function image() { // $url = 'uploads/20241026/8f32aebb8be904c5c01ea80de534880...

thinkphp 加cache锁

$lockKey = 'user_lock_requirement' . $this->user_id; $isLocked = Cache::get($lockKey); if ($isLo...

查找重复的数据

$data = Db::name('about_product_list')->field('id,title,count(id) as num')->gr...

关注公众号登录

/* * 服务端生成带唯一标识二维码并将唯一标识返回给前端 */ public function wx_code() { $scene_str...