项目上需要用到支付宝支付,然后匆忙的看了下教程和网上分享的方法,整理了下,现在分享出来
$order_id=Request::instance()->param("id");//订单号
if(empty($order_id))
{
return json(['code'=>2,'msg'=>'参数错误','data'=>'']);
}
//查询订单信息
$order_info = Db::name('ns_order')->where('order_id',$order_id)->find();
if(empty($order_info))
{
return json(['code'=>3,'msg'=>'无订单信息','data'=>'']);
}
if($order_info['order_status'] != 0)
{
return json(['code'=>4,'msg'=>'此订单已关闭,请重新下单','data'=>'']);
}
$reoderSn = $order_info['order_no'];
//获取支付方式
//获取支付金额
$money = $order_info['pay_money'];
//判断支付方
$alipay = new \think\Alipay();
//异步回调地址
//$url = '**********/alipay_notify';
$url = str_replace("/index.php", '', __URL__);
$url = str_replace("index.php", '', $url);
$url = $url . "/notify.php";
$body='订单支付';
$array = $alipay ->alipay($body, $money, $reoderSn,$url);
//$a=$alipay->alipayRefund();
if ($array) {
return json(['code'=>1,'msg'=>'成功','data'=>$array]);
} else {
return json(['code'=>0, 'msg'=>'对不起请检查相关参数','data'=>'']);
}
支付宝回调地址需要用到支付宝中设置的域名
回调方法
Log::write("支付宝------------------------------------进入回调用");
import('.alipay.aop.AopClient', '', '.php');
Log::write("支付宝------------------------------------开始第一步引入");
$data = $_POST;
Log::write("支付宝------------------------------------第二步接收");
$aop = new \AopClient;
$aop->alipayrsaPublicKey = \think\Config::get('alipay')['rsaPublicKey'];
$flag = $aop->rsaCheckV1($data, NULL, "RSA2");
Log::write("支付宝------------------------------------第三步验证签名");
Log::write('$data',"czx111");
if($flag = 0)
{
echo 000;
exit;
}else{
if( $_POST['trade_status'] == 'TRADE_SUCCESS')
{
$order_id = $_POST['out_trade_no'];//商户订单号
$order=Db::name('ns_order')->where('order_no',$order_id)->find();
$result=Db::name('ns_order')->where('order_no',$order_id)->update(['order_status'=>1]);//修改订单状态,支付宝单号到数据库
$results=Db::name('ns_order')->where('order_no',$order_id)->update(['payment_type'=>2]);//修改订单支付状态,支付宝单号到数据库
if($result) {
echo "success"; //返回给支付宝系统,请不要修改或删除
}
}else{
echo "fail";
}
}
/*
* 支付宝支付
* $body 名称
* $total_amount 价格
* $product_code 订单号
* $notify_url 异步回调地址
*/
public function alipay($body, $total_amount, $product_code, $notify_url)
{
/**
* 调用支付宝接口。
*/
Loader::import('.alipay.aop.AopClient', '', '.php');
Loader::import('.alipay.aop.request.AlipayTradeAppPayRequest', '', '.php');
$aop = new \AopClient();
$aop->gatewayUrl = Config::get('alipay')['gatewayUrl'];
$aop->appId = Config::get('alipay')['appId'];
$aop->rsaPrivateKey = Config::get('alipay')['rsaPrivateKey'];
$aop->format = Config::get('alipay')['format'];
$aop->charset = Config::get('alipay')['charset'];
$aop->signType = Config::get('alipay')['signType'];
$aop->alipayrsaPublicKey = Config::get('alipay')['alipayrsaPublicKey'];
$request = new \AlipayTradeAppPayRequest();
$arr['body'] = $body;
$arr['subject'] = $body;
$arr['out_trade_no'] = $product_code;
$arr['timeout_express'] = '30m';
$arr['total_amount'] = floatval($total_amount);
$arr['product_code'] = 'QUICK_MSECURITY_PAY';
$json = json_encode($arr);
$request->setNotifyUrl($notify_url);
$request->setBizContent($json);
$response = $aop->sdkExecute($request);
//print_r($request);die;
return $response;
}
以上就是支付宝支付的方法,测试没问题