1. 商家通过扫描线下买家支付宝钱包中的条码、二维码等办法完成支付(本文讲讲这个);
2. 线下买家通过利用支付宝钱包扫一扫,扫描商家的二维码等办法完成支付。
开拓之前须要申请的开拓参数详见支付宝开拓平台进行申请

开拓步骤:
步骤一、 下载官方demo 地址:https://opendocs.alipay.com/open/54/104506;放置项目框架(tp5)的vendor文件中
步骤二、配置自己开拓申请的必要参数
<?php/ 扫码支付 提醒:提交支付要求后微信会同步返回支付结果(没有异步回调关照)。当返回结果为“系统缺点”时,商户系统等待5秒后调用【查询订单API】,查询支付实际交易结果;当返回结果为“USERPAYING”时,商户系统可设置间隔韶光(建议10秒)重新查询支付结果,直到支付成功或超时(建议30秒); /namespace app\api\controller;use think\Controller;use think\Db;use think\Input;use think\facade\Request;use app\api\controller\Common;header("Access-Control-Allow-Origin:");header("Content-type: text/html; charset=utf-8");require_once $_SERVER['DOCUMENT_ROOT'].'/vendor/Alipaydangmianfu_demo/f2fpay/model/builder/AlipayTradePayContentBuilder.php';require_once $_SERVER['DOCUMENT_ROOT'].'/vendor/Alipaydangmianfu_demo/f2fpay/service/AlipayTradeService.php';/ 支付宝当面付 @package app\api\controller /class Alipay{ / Notes: User: 小艾 Time:下午 1:51 $authCode 用户支付码 $totalAmount 支付金额 $outTradeNo 订单号 DATE:2020/12/10 0010 / public function alipay($authCode,$totalAmount,$outTradeNo){ $common = new Common(); $config = array ( //署名办法 'sign_type' => "RSA2", //支付宝公钥 'alipay_public_key'=>'', //商户私钥 'merchant_private_key' => "", //编码格式 'charset' => "UTF-8", //支付宝网关 'gatewayUrl' => "https://openapi.alipay.com/gateway.do", //运用ID 'app_id' => "2016111102724113", //异步关照地址,只有扫码支付预下单可用 'notify_url' => "", //最大查询重试次数 'MaxQueryRetry' => "10", //查询间隔 'QueryDuration' => "3" ); // (必填) 商户网站订单系统中唯一订单号,64个字符以内,只能包含字母、数字、下划线, // 需担保商户系统端不能重复,建议通过数据库sequence天生,// $outTradeNo = "Dsx" . date('Ymdhis') . mt_rand(100, 1000); $subject = "第三巷条形码支付";// $totalAmount = $_POST['payAmount']; // (必填) 订单总金额,单位为元,不能超过1亿元 // (必填) 付款条码,用户支付宝钱包手机app点击“付款”产生的付款条码// $authCode = $_POST['auth_code']; //28开头18位数字 // 支付超时,线下扫码交易定义为5分钟 $timeExpress = "5m"; // 创建要求builder,设置要求参数 $barPayRequestBuilder = new \AlipayTradePayContentBuilder(); $barPayRequestBuilder->setOutTradeNo($outTradeNo); $barPayRequestBuilder->setTotalAmount($totalAmount); $barPayRequestBuilder->setAuthCode($authCode); $barPayRequestBuilder->setTimeExpress($timeExpress); $barPayRequestBuilder->setSubject($subject); // 调用barPay方法获取当面付应答 $barPay = new \AlipayTradeService($config); $barPayResult = $barPay->barPay($barPayRequestBuilder); switch ($barPayResult->getTradeStatus()) { case "SUCCESS":// echo "支付宝支付成功:" . "<br>--------------------------<br>"; $data = $barPayResult->getResponse(); $result = $common->returnway(2000,"支付宝支付成功!
",$data); return json_encode($result); break; case "FAILED":// echo "支付宝支付失落败!!!" . "<br>--------------------------<br>"; if (!empty($barPayResult->getResponse())) { $data = $barPayResult->getResponse(); $result = $common->returnway(2002,"支付宝支付失落败!
",$data); return json_encode($result); } break; case "UNKNOWN":// echo "系统非常,订单状态未知!!!" . "<br>--------------------------<br>"; if (!empty($barPayResult->getResponse())) { $result = $common->returnway(4000,"系统非常,订单状态未知!
",$barPayResult->getResponse()); return json_encode($result); } break; default: echo "不支持的交易状态,交易返回非常!!!"; break; } return; }}
步骤三、吸收前端参数 调取下列方法即可
/ Notes:门店扫码支付 User: 小艾 Time:下午 4:14 DATE:2020/12/9 0009 / public function Scantopay(){ header("Access-Control-Allow-Origin:"); $common = new Common(); if (request()->isPost()){ $authCode = input('authCode','');//用户付款码 $payAmount = input('payAmount','');//订单支付金额 $outTradeNo = input('outTradeNo','');//订单号$out_trade_no $payment_type = input('payment_type',1);//支付办法 1-微信 2-支付宝 3-现金支付 if (!empty($authCode) && !empty($payAmount) && !empty($outTradeNo)){ if($payment_type == 1){//调取微信扫码支付 $weixinpay = new Scantopay(); $data = $weixinpay->weixinpay($authCode,$payAmount,$outTradeNo); if($data['return_code']=='SUCCESS'){//订单支付成功扣除门店库存 $result = $common->returnway(2000,'支付成功!',$data); return json_encode($result); }else{ $result = $common->returnway(4001,'支付支付!',$data); return json_encode($result); } }elseif ($payment_type == 2){//调取支付宝扫码支付 $alipay = new Alipay(); $data = $alipay->alipay($authCode,$payAmount,$outTradeNo); print_r($data);die;// if($data['return_code']=='SUCCESS'){// $result = $common->returnway(2000,'支付成功!',$data);// return json_encode($result);// } } }else{ $result = $common->returnway(4001,'要求参数不能为空!',[]); return json_encode($result); } }else{ $result = $common->returnway(4000,'要求办法有误!',[]); return json_encode($result); } }
和微信的事理效果一样,以是我封装到一起了,阅读到这里的好友们有没有get到程序的乐趣?
如果你有更好的封装效果欢迎留言!
!
!