php对接支付宝扫码付

申请开发应用

可使用公司营业执照或个体工商户申请

支付宝开放平台
https://open.alipay.com/

功能签约

在这里插入图片描述

密钥要存储起来

在这里插入图片描述

功能对接(使用thinkphp5.1)

接口扩展文件

在这里插入图片描述

配置文件

在这里插入图片描述

整理集合
链接:https://pan.baidu.com/s/1-TPJgv7IWx4cl-6YPwapNA
提取码:jhkc

前台操作

<!DOCTYPE html>
<html>

<head>
	<title>{$user_login} - 支付充值</title>
	<meta name="keywords" content="" />
	<meta name="description" content="">
	<include file="public@head" />
</head>

<body class="body-white" id="top">
	<include file="public@nav" />

	<div class="container tc-main">
		<div class="row">
			<div class="col-md-3">
				<include file="public@usernav" />
			</div>
			<div class="col-md-9">
				<div class="tabs">
					<ul class="nav nav-tabs">
						<li class="active"><a href="#one" data-toggle="tab"><i class="fa fa-edit"></i> 支付充值</a></li>
					</ul>
					<div class="tab-content">
						<div class="tab-pane active" id="one">
							<br>
							<form class="js-ajax-form" method="post">
								<div class="form-group">

									<label for="input-sex">支付方式</label>
									<div>
										<div>微信支付<input type="radio" name="type" value="1" checked></div>
										<div>支付宝支付<input type="radio" name="type" value="2"></div>
									</div>

								</div>
								<div class="form-group">
									<label for="input-birthday">支付金额</label>
									<input class="form-control" type="number" name="money" value="0.01">
								</div>
								<div class="form-group">
									<input type="button" id="pay" class="btn btn-primary js-ajax-submit" value="确定">
								</div>
								<div id="pay_bolck" style="display: none;">
									<div id="pay_qrcode"></div>
									<span id="pay_text"></span>
								</div>
							</form>
						</div>
					</div>
				</div>
			</div>
		</div>
		<include file="public@footer" />
	</div>
	<!-- /container -->
	<include file="public@scripts" />
	<script src="https://cdn.bootcss.com/jquery.qrcode/1.0/jquery.qrcode.min.js"></script>
	<script>


		var out_trade_no = '';
		$('#pay').click(function (e) {
			$.ajax({
				type: "method",
				url: "{:url('pay')}",
				data: $("form").serialize(),
				method: "POST",
				dataType: "json",
				success: function (response) {
					var type = $("input:radio[name=type]:checked").val();
					$("#pay_bolck").css('display', 'block');
					$("#pay_qrcode").html('');
					out_trade_no = response.out_trade_no;
					$("#pay_qrcode").qrcode({
						width: 200,
						height: 200,
						text: response.url,
						// background:,//背景色,
						// foreground://前景色
					})
					if (type == 1) {
						$("#pay_text").text("打开微信,扫描二维码支付");
					}
					if (type == 2) {
						$("#pay_text").text("打开支付宝,扫描二维码支付");
					}
				}
			});
		});


		//轮询订单状态
		$(document).ready(function () {
			setInterval("ajaxstatus()", 3000);
		});

		function ajaxstatus() {
			if (out_trade_no != '') {
				$.ajax({
					url: "{:url('payFind')}?out_trade_no=" + out_trade_no,
					type: "POST",
					dataType: "json",
					data: "",
					success: function (data) {
						if (data.code == 1) { //订单状态为1表示支付成功
							window.location.href = "/"; //页面跳转
						}
					},
					error: function () {
						alert("请求订单状态出错");
					}
				});
			}
		}

	</script>
</body>

</html>

支付操作(不要使用收款支付宝支付)

入口文件index.php中加入常量配置
在这里插入图片描述

// 支付目录
define('PAY_PATH', CMF_ROOT . 'extend/Library/');
    /**
     * 阿里当面付支付业务
     */
    // $result
    // object(AlipayF2FPrecreateResult)#52 (2) {
    //     ["tradeStatus":"AlipayF2FPrecreateResult":private] => string(7) "SUCCESS"
    //     ["response":"AlipayF2FPrecreateResult":private] => object(stdClass)#51 (4) {
    //       ["code"] => string(5) "10000"
    //       ["msg"] => string(7) "Success"
    //       ["out_trade_no"] => string(20) "XXXXXX"
    //       ["qr_code"] => string(46) "https://qr.alipay.com/XXXXX"
    //     }
    //   }
    public function aliPay($money)
    {

        require PAY_PATH . '/ali_pay/f2fpay/service/AlipayTradeService.php'; //引入支付宝当面付
        require PAY_PATH . '/ali_pay/f2fpay/model/builder/AlipayTradePayContentBuilder.php'; //引入支付宝当面付
        $out_trade_no = 'ALIPAY' . date("YmdHis");
        $payRequestBuilder = new \AlipayTradePayContentBuilder();
        $payRequestBuilder->setBody('tset');
        $payRequestBuilder->setSubject('扫码支付' . $money . '元');
        $payRequestBuilder->setTotalAmount($money);
        $payRequestBuilder->setOutTradeNo($out_trade_no);
        $result = new \AlipayTradeService(config('alipay.'));
        $result = $result->qrPay($payRequestBuilder);

        // dump($result);
        // exit;

        if ($result->getTradeStatus() == "SUCCESS") {
            $response = $result->getResponse();
            return [
                'url' => $response->qr_code,
                'out_trade_no' => $out_trade_no,
            ];
        } else {
            $this->error('参数错误');
        }
    }

回调操作

/**
  * 阿里云当面付支付回调处理
  */
 // Array
 // (
 //     [s] => /common/third/aliPayCallback
 //     [gmt_create] => 2020-01-27 14:57:13
 //     [charset] => UTF-8
 //     [seller_email] => XXXXX
 //     [subject] => 扫码支付0.01元
 //     [sign] => XXXXX
 //     [body] => tset
 //     [buyer_id] => XXXXX
 //     [invoice_amount] => 0.01
 //     [notify_id] => XXXXX
 //     [fund_bill_list] => [{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}]
 //     [notify_type] => trade_status_sync
 //     [trade_status] => TRADE_SUCCESS
 //     [receipt_amount] => 0.01
 //     [buyer_pay_amount] => 0.01
 //     [app_id] => XXXXX
 //     [sign_type] => RSA2
 //     [seller_id] => XXXXX
 //     [gmt_payment] => 2020-01-27 14:57:24
 //     [notify_time] => 2020-01-27 14:57:25
 //     [version] => 1.0
 //     [out_trade_no] => XXXXX
 //     [total_amount] => 0.01
 //     [trade_no] => XXXXX
 //     [auth_app_id] => XXXXX
 //     [buyer_logon_id] => XXXXX
 //     [point_amount] => 0.00
 // )
 public function aliPayCallback()
 {
     require PAY_PATH . '/ali_pay/aop/AopClient.php'; //引入支付宝当面付
     $config = config('alipay.');
     $out_trade_no = input('post.out_trade_no');
     $transaction_id = input('post.trade_no');
     $aop = new \AopClient;
     $aop->appId = $config['app_id'];
     $aop->rsaPrivateKey = $config['merchant_private_key'];
     $aop->alipayrsaPublicKey = $config['alipay_public_key'];
     $aop->signType = $config['sign_type']; 
     $result = $aop->rsaCheckV1($_POST, '', $config['sign_type']);
     if ($result) {
         if (input('trade_status') == 'TRADE_FINISHED' || input('trade_status') == 'TRADE_SUCCESS') {
             // 处理支付成功后的逻辑业务
             $order =  DB::name('recharge')->where(['out_trade_no' => $out_trade_no])->find();
             if (!$order) {
                 return 'order not exists';
             }
             //订单状态错误 1 未付款 其他状态均为已处理的状态
             if ($order['status'] != 1) {
                 return true;
             }
             //改变订单状态
             DB::name('recharge')
                 ->where('out_trade_no', $out_trade_no) //商户自定义订单号
                 ->update([
                     'transaction_id' => $transaction_id,   //支付宝交易单号
                     'status'         => 2,                 //已支付
                     'end_time'       => time()             //完成时间
                 ]);

             $recharge = DB::name('recharge')
                 ->where('out_trade_no', $out_trade_no) //商户自定义订单号
                 ->field('uid,total_fee')
                 ->find();

             //增加用户余额
             DB::name('user')
                 ->where('id', $recharge['uid'])
                 ->setInc('balance', $recharge['total_fee']);
                 
             //支付成功的逻辑
             return 'success';
         }
         return 'fail';
     }
     return 'fail';
 }
 
发布了65 篇原创文章 · 获赞 20 · 访问量 2099

猜你喜欢

转载自blog.csdn.net/weixin_43993175/article/details/104036775