在php中实现支付宝支付需要以下几样东西:
1、app_id(支付宝分配给开发者的应用ID)
2、ali_public_key(支付宝公钥)
3、private_key(开发者私钥)
4、php 支付宝支付sdk(下载地址:https://docs.open.alipay.com/54/106370/ 把其中的aop文件放入vendor目录下)
如下例:
<?php
namespace app\api\controller;
use think\Db;
class Alipay{
/*
支付宝支付配置参数
*/
private $config = array(
'app_id'=>'你的appid',
'notify_url'=>"http://xxx/api/Alipay/aliNotifyUrl", //支付回调地址
'return_url'=>'http://yansongda.cn/return.php',
'ali_public_key'=>'支付宝公钥',
'private_key'=>'你的私钥'
);
//支付宝支付
public function pay($body, $orderid, $out_trade_no, $total_fee, $type){
//引入sdk
vendor('aop.AopClient');
vendor('aop.request.AlipayTradeAppPayRequest');
$aop = new \AopClient();
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = $this->config['app_id'];
$aop->rsaPrivateKey = $this->config['private_key']; //私钥
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA2";
$aop->alipayrsaPublicKey = $this->config['ali_public_key']; //公钥
$request = new \AlipayTradeAppPayRequest();
$bizcontent = json_encode([
'body'=>$body,
'subject'=>$body,
'out_trade_no'=> $out_trade_no,
'total_amount'=> $total_fee,
'timeout_express'=>'30m',
'product_code'=>'QUICK_MSECURITY_PAY'
]);
$request->setNotifyUrl($this->config['notify_url']);
$request->setBizContent($bizcontent);
$response = $aop->sdkExecute($request);
if($response){
echo json_encode(['status'=>1,'msg'=>'success','orderid'=>$orderid,'data'=>$response]);
}else{
echo json_encode(['status'=>0,'msg'=>'false','orderid'=>$orderid]);
}
}
//支付回调
public function aliNotifyUrl(){
//接收参数
$params = input();
//开启事务
Db::startTrans();
try{
#你的回调处理业务逻辑代码
}
}catch(\Exception $e){
Db::rollback();
}
echo "success";
}
// 保存支付宝订单流水号
public function saveAliFlowSno(){
$out_trade_no = input('out_trade_no');
$trade_no = input('trade_no');
$order = Db::name('order')->where(['order_sn'=>$out_trade_no])->find();
$data['id'] = $order['id'];
$data['flow_sn'] = $trade_no;
Db::name('order')->update($data);
}
}
希望对你有所帮助(*╹▽╹*)