下载SDK
SDK & Demo - 支付宝文档中心 (alipay.com)
下载完成后可以放在public目录下
然后进入config.php进行配置
因为这是纯支付宝支付所以一些东西都写死了
接收前段传来的值
public function pay(){
// 接收数据
$data=input("post.");
// 验证订单号是否存在(根据用户id以及订单号)
$user_id=session('userInfo.id');
$orderId=$data['orderId'];
$order=\app\home\model\Order::getOrderByUserId($user_id,$orderId);
if (!$order){
// 抛出异常 记录日志
echo '订单不存在';
}
echo "<form id='alipayment' action='/alipay/pagepay/pagepay.php' method='post'>
<input id='WIDout_trade_no' name='WIDout_trade_no' value=".$orderId."/>
<input id='WIDsubject' name='WIDsubject' value='假的唬人的'/>
<input id='WIDtotal_amount' name='WIDtotal_amount' value='".$order['order_amount']."' />
<input id='WIDbody' name='WIDbody' />
</form><script>document.getElementById('alipayment').submit();</script>";
}
这时就会自动跳转到支付宝支付页面了
支付完成后就跳转到当初配置的回调地址了(验证支付信息)
这里为了更清楚的展示出来就没有进行封装
// 回调
public function paySuccess(){
$rollBack=input();
require_once("./alipay/config.php");
require_once './alipay/pagepay/service/AlipayTradeService.php';
$alipaySevice = new \AlipayTradeService($config);
$result = $alipaySevice->check($rollBack);
// 回调成功 修改订单状态 支付方式 支付code
$data=[
'pay_code'=>'alipay',
'pay_name'=>"支付宝",
'order_status'=>1
];
// 调用模型修改订单数据
\app\home\model\Order::updateOrder($data,$rollBack['out_trade_no']);
$user_id=session('userInfo.id');
// 回调成功:将冻结库存要释放(此时真正购买了这件商品)
$goods=OrderBusiness::getCartWithGoods();
// 预扣库存
foreach ($goods['cartData'] as $val){
// 判断是否有SKU
if (isset($val['spec_goods_id'])&& !empty($val['spec_goods_id'])){
// 冻结库存自减
Db::table('pyg_spec_goods')
->where('id', $val['spec_goods_id'])
->dec('store_frozen',$val['number'])
->update();
}else{
// 冻结库存自减
Db::table('pyg_goods')
->where('id', $val['goods_id'])
->dec('frozen_number',$val['number'])
->update();
}
}
// 清空购物车
Cart::delGoodsCart($user_id);
// 跳转到支付成功页面
return view('paySuccess');
}