沙箱环境 支付(当面付教程),参考下面这个可以配置环境
https://blog.youkuaiyun.com/a639735331/article/details/92847337
支付宝支付 沙箱
https://blog.youkuaiyun.com/YuiJar/article/details/80290511
沙箱资料,有沙箱账号密码
https://openhome.alipay.com/platform/appDaily.htm
https://openhome.alipay.com/platform/appDaily.htm?tab=account 沙箱账号
https://openhome.alipay.com/platform/appDaily.htm?tab=info
https://docs.open.alipay.com/api_1_vip/alipay.trade.pay
参考下面这个可以做 wappay 的支付
ThinkPHP5.0集成支付宝扫码支付(PC端)
https://blog.youkuaiyun.com/msllws/article/details/84334127 简洁
TP5.0.X 支付宝支付(官方demo)
http://www.thinkphp.cn/code/4180.html 简洁
tp5整合支付宝微信扫码支付
http://www.thinkphp.cn/topic/65990.html
PHP Thinkphp 支付宝当面付2.0代码
https://blog.youkuaiyun.com/weixin_40896800/article/details/81563758
支付宝当面付与网页支付,一个php文件搞定
https://blog.youkuaiyun.com/qq_21761149/article/details/84502416
如何在tp5中引入支付宝支付demo中的config文件
https://blog.youkuaiyun.com/haibo0668/article/details/81098467
我的 1
1 下载demo放在vendor下,重命名为alipay
2 配置config,在application/config.php里公共配置
'alipay' => [
//APPID。
'app_id' => "",
//商户私钥
'merchant_private_key' => "",
//异步通知地址
'notify_url' => "https://www.oyhdo.com/alipay/alinotify",
//同步跳转
'return_url' => "https://www.oyhdo.com/alipay/alinotify",
//编码格式
'charset' => "UTF-8",
//签名方式
'sign_type'=>'RSA2',
//支付宝网关 (我使用的沙箱环境)
'gatewayUrl' => "https://openapi.alipaydev.com/gateway.do",
//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
'alipay_public_key' => "",
],
3
<?php
namespace app\admin\controller;
use think\Controller;
use app\index\controller\Commen;
use think\Session;
use think\Db;
use think\Request;
class Alipay extends Commen
{
public function index()
{
header("Content-type:text/html;charset=utf-8");
$total_amount = input('post.total_amount');
if($total_amount){
//商户订单号,商户网站订单系统中唯一订单号,必填
$out_trade_no = input('post.out_trade_no');
//订单名称,必填
$subject = input('post.goods_name');
//付款金额,必填
$total_amount = $total_amount;
//商品描述,可空
$body = input('post.goods_body');
//引入支付宝支付
vendor('alipay.wappay.service.AlipayTradeService');
vendor('alipay.wappay.buildermodel.AlipayTradeWapPayContentBuilder');
//构造参数
$payRequestBuilder = new \AlipayTradeWapPayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$config = config('alipay'); // 我配置在了app/config中
//电脑网站支付请求
$aop = new \AlipayTradeService($config);
$response = $aop->wapPay($payRequestBuilder,$config['return_url'],$config['notify_url']);
//输出表单
var_dump($response);
}else{
$out_trade_no = 'ALPAY'.date('YmdHis'); //订单号
$goods_name = '在线支付'; //商品名称
$goods_body = 'test'; //商品描述
$this->assign('out_trade_no',$out_trade_no);
$this->assign('goods_name',$goods_name);
$this->assign('goods_body',$goods_body);
return view();
}
}
}
?>
页面
<!DOCTYPE html>
<html>
<head>
<title>alipay_test</title>
</head>
<body>
<form name=alipayment action="{:url('admin/alipay/index')}" method="post" target="_blank">
商户订单号:<input type="text" name="out_trade_no" value="{$out_trade_no}" /><br/>
订单名称:<input type="text" name="goods_name" value="{$goods_name}"/><br/>
付款金额:<input type="text" name="total_amount" /><br/>
商品描述:<input type="text" name="goods_body" value="{$goods_body}"/><br/>
<button type="submit">付 款</button>
</form>
</body>
</html>
方式2,不用页面传值,直接在方法中固定,访问方法名即可
public function pay($money=0.01)
{
vendor('alipay.wappay.service.AlipayTradeService');
vendor('alipay.wappay.buildermodel.AlipayTradeWapPayContentBuilder');
$order_sn = time(); // 生成订单号,这里直接取时间戳了
/*
* 创建支付订单,存入充值表中,大家自行处理
* */
$data = [
'order_sn' => $order_sn,
'uid' => '1',
'price' => $money,
'status' => 1,
'order_time'=> date('Y-m-d H:i:s')
];
// Db::name('recharge')->insert($data);
// 请求参数设置
$config = config('alipay'); // 读取支付宝配置信息
$out_trade_no = $order_sn; // 商户订单号,商户网站订单系统中唯一订单号,必填
$subject = '支付宝充值测试'; // 订单名称,必填
$total_amount = $money; // 付款金额,必填
$body = '支付宝充值测试'; // 商品描述,可空
// 构造参数
$payRequestBuilder = new \AlipayTradeWapPayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$aop = new \AlipayTradeService($config);
$response = $aop->wapPay($payRequestBuilder,$config['return_url'],$config['notify_url']); // (请求参数, 同步通知地址, 异步通知地址)
//输出表单
var_dump($response);
}
方式3 ,传值 到 alipay 方法中,和 2 一致
http://www.thinkphp.cn/code/4180.html
$arr=[
'WIDout_trade_no'=>订单号,
'WIDsubject'=>'在线支付',
'WIDtotal_amount'=>应支付金额,
'WIDbody'=>'商品名'
];
session('order',$order);
alipay($arr, 'notify_url', 'return_url');
common中添加方法 alipay
common添加方法
function alipay($post,$notify_url,$return_url){
$config = Config('alipay');
$arr=[
'app_id'=>$config['app_id'],
'merchant_private_key'=>$config['merchant_private_key'],
'notify_url'=>$notify_url,
'return_url'=>$return_url,
'charset'=>$config['charset'],
'sign_type'=>$config['sign_type'],
'gatewayUrl'=>$config['gatewayUrl'],
'alipay_public_key'=>$config['alipay_public_key']
];
vendor('alipay.AlipayTradeService');
vendor('alipay.AlipayTradePagePayContentBuilder');
$out_trade_no = trim($post['WIDout_trade_no']);
$subject = trim($post['WIDsubject']);
$total_amount = trim($post['WIDtotal_amount']);
$body = trim($post['WIDbody']);
$payRequestBuilder = new \AlipayTradePagePayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$aop = new \AlipayTradeService($arr);
$response = $aop->pagePay($payRequestBuilder, $arr['return_url'], $arr['notify_url']);
var_dump($response);
}