简介:
蚂蚁金服开放平台基于支付宝的海量用户,将强大的支付、营销、数据能力,通过接口等形式开放给第三方合作伙伴,帮助第三方合作伙伴创建更具竞争力的应用。
通过接入蚂蚁金服开放平台,第三方合作伙伴可以获得更多的流量、用户和收益,而第三方合作伙伴提供的服务也让用户获得了更丰富的体验,平台生态更加繁荣,最终实现多方共赢
开发文档 和介绍网站:https://docs.open.alipay.com
1注册一个沙箱号 网站https://open.alipay.com/platform/home.htm
使用真的支付宝扫描 进去 注册 沙箱支付宝
一、同步回调
1.支付宝支付需配置alipay/config.php配置文件:添加商户私钥,支付宝公钥,同步,异步跳转地址,网关
//去支付
public function pay(Request $request)
{
//判断是否登录
$uid = Cache::get('userinfo');
if($uid==null){
return redirect('login');
}
$data = $request->all();
//判断是否重复提交
$order = OrderModel::findOrder($data['order_sn']);
if($order['order_status']==1){
return fail("订单不能重复提交");
}
//判断订单是否延时
$time = Cache::get('time');
if(time()-strtotime($time)>300){
return fail("订单超时,请重新下单");
}
if($data['payWay']==null){
return fail(500,"请选择支付方式");
}
$goods_price = rtrim($data['goods_price'],"点");
try {
\app\admin\model\Order::where('order_sn',$data['order_sn'])->find();
}catch (Exception $exception){
throw new Exception("订单编号异常");
}
//判断支付方式
switch ($data['payWay']){
case 'alipay':{
echo '';
}
}
}
2.同步用于支付宝支付,路由用get方式提交
//同步回调
Route::get('rollBack','Order/rollBack');
3.支付流程:引入回调地址->验证参数->正确判断订单号是否存在->不存在返回失败->存在判断是否有误->修改订单状态
//同步回调
public function rollBack()
{
try {
$param = input();
require_once("./plugins/alipay/config.php");
require_once("./plugins/alipay/pagepay/service/AlipayTradeService.php");
$alipaySevice = new \AlipayTradeService($config);
$result = $alipaySevice->check($param);
//验证成功
if ($result) {
//商户订单号
$out_trade_no = $_GET['out_trade_no'];
//查询订单是否存在
$order = OrderModel::where('order_sn',$out_trade_no)->find()->toArray();
if(!$order){
return fail();
}
//订单号一致
if($order['order_sn']==$out_trade_no){
//若数据库状态为1,则已支付
if($order['order_status']==1){
return fail("订单已支付");
}else{
//否则修改数据库的状态
$res = OrderModel::where('id',$order['id'])->update(['order_status'=>1]);
}
//状态修改成功,则返回成功
if($res){
Log::record($result);
return redirect('success');
}
return fail();
}
} else {
return redirect('fail');
}
}catch (Exception $exception){
return fail($exception->getMessage());
}
}
二、异步回调
1.异步回调用户修改订单状态(要用post方式)
//异步回调
Route::post('notify','Order/notify');
2.控制器中
//异步回调
public function notify()
{
$result = true;
//记录日志
Log::record(json_encode(\request()->post()));
if($result) {
//商户订单号
$out_trade_no = $_POST['out_trade_no'];
//查找订单号那条数据
$order = OrderModel::where('order_sn',$out_trade_no)->find()->toArray();
if(!$order){
return fail();
}
//交易状态
$trade_status = $_POST['trade_status'];
//订单状态
$status = $order['order_status'];
if($_POST['trade_status'] == 'TRADE_FINISHED') {
if($status == 1){
return fail("订单已支付");
}else{
//修改数据库中的状态
$res = OrderModel::where('id',$order['id'])->update(['order_status'=>1]);
}
//判断修改后的状态
if($res){
return success();
}else{
return fail();
}
}
return fail();
}else {
//验证失败
return fail();
}
}
3.postman中测试
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)