PHP 服务端支付宝支付
<?php
namespace app\api\controller;
use app\common\master\Task;
use app\common\user\User;
use app\common\user\UserGoodsLog;
use app\common\web\Goods;
use app\common\web\Order;
use think\Controller;
use think\Db;
use think\facade\Env;
//引入必要文件
require Env::get('root_path') . 'extend/aop/AopClient.php';
require Env::get('root_path') . 'extend/aop/request/AlipayTradeAppPayRequest.php';
class AliPay extends Controller
{
function getPrePayOrder($body, $order_sn, $total_fee)
{
header("Content-type:text/html;charset=utf-8");
// 调用支付宝配置文件
$API = config('sf_config.alipay_config');
//构造业务请求参数的集合(订单信息)
$content = array();
$content['subject'] = $body; // 商品标题
$content['body'] = 'APP支付'; // 商品描述 非必须
$content['out_trade_no'] = $order_sn; // 订单号
$content['total_amount'] = $total_fee; // 要求必须为浮点型,订单金额
$content['product_code'] = "QUICK_MSECURITY_PAY"; //销售产品码,固定值
$con = json_encode($content); //$content是biz_content的值,将之转化成json字符串
//公共参数
$Client = new \AopClient(); //实例化支付宝sdk里面的AopClient类,下单时需要的操作,都在这个类里面
$param = array();
$param['app_id'] = $API['appid']; //支付宝分配给开发者的应用ID
$param['method'] = $API['method']; //接口名称
$param['charset'] = $API['charset']; //请求使用的编码格式
$param['sign_type'] = $API['sign_type']; //商户生成签名字符串所使用的签名算法类型
$param['timestamp'] = date("Y-m-d H:i:s"); //发送请求的时间
$param['version'] = $API['version']; //调用的接口版本,固定为:1.0
$param['notify_url'] = request()->domain() . '/api.php/AliPay_notify.json'; //支付宝服务器主动通知地址
$param['biz_content'] = $con; //业务请求参数的集合,长度不限,json格式
$paramStr = $Client->getSignContent($param);//组装请求签名参数 到此步目前没有问题
$sign = $Client->alonersaSign($paramStr, $API['rsaPrivateKey'], 'RSA2'); //生成签名
$param['sign'] = $sign;
$str = $Client->getSignContentUrlencode($param); //最终请求参数
return $str;
}
public function aliPay_notify()
{
$_POST = $_REQUEST;
if ($_POST == null) {
$_POST = file_get_contents("php://input");
}
if ($_POST == null) {
$_POST = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
}
file_put_contents("ali_back.txt", file_get_contents("php://input"));
//验证签名
$aop = new \AopClient;
$aop->alipayrsaPublicKey = config('sf_config.alipay_config.alipayrsaPublicKey');
$flag = $aop->rsaCheckV1($_POST,$aop->alipayrsaPublicKey, "RSA2");
// file_put_contents("ali_back2.txt", $flag);
// file_put_contents("ali_back3.txt", $_POST);
//验签
// if ($flag) {
// file_put_contents("ali_back4.txt", '我进来了');
//处理业务,并从$_POST中提取需要的参数内容
if ($_POST['trade_status'] == 'TRADE_SUCCESS' || $_POST['trade_status'] == 'TRADE_FINISHED') {
//处理交易完成或者支付成功的通知
die('success');//响应success表示业务处理成功,告知支付宝无需在异步通知
} else {//已支付 或者不能再支付
die('success');//响应success表示业务处理成功,告知支付宝无需在异步通知
}
}
// }
}
}