<?php
namespace app\api\service;
alipay放在extend文件夹下
//引入
require_once app()->getRootPath().'extend'.DIRECTORY_SEPARATOR.'alipay'.DIRECTORY_SEPARATOR.'AopSdk.php';
// app - 支付宝支付 金额 订单号 回调地址
public function alipay($total_amount, $out_trade_no, $notify_url)
{
//获取配置
$config = config('aliPay');
$notify_url = '域名'.$notify_url;
//file_put_contents("8888888888888888888888.txt",$notify_url);
// code...
try {
// 实例化 AopClient
$aop = new \AopClient();
// 支付宝网关地址
$aop->gatewayUrl = $config['gatewayUrl'];
// 支付宝APPID
$aop->appId = $config['appId'];
// 开发者私钥
$aop->rsaPrivateKey = $config['rsaPrivateKey'];
// 返回格式
$aop->format = $config['format'];
// 字符编码utf8
$aop->charset = $config['charset'];
// 加密方式
$aop->signType = $config['signType'];
// 请填写支付宝公钥,一行字符串
$aop->alipayrsaPublicKey = $config['alipayrsaPublicKey'];
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
$request = new \AlipayTradeAppPayRequest();
// 下单数据
$bizcontent = [];
$bizcontent['body'] = lang('购买商品')."-".$out_trade_no; // 交易的具体描述信息。
$bizcontent['subject'] = lang('购买商品,订单号:').$out_trade_no; // 商品的标题/交易标题/订单标题/订单关键字
$bizcontent['out_trade_no'] = "$out_trade_no"; // 唯一订单号
$bizcontent['timeout_express'] = '30m'; // 该笔订单允许的最晚付款时间,逾期将关闭交易
$bizcontent['total_amount'] = (String) round($total_amount/100,2); // 订单总金额,单位为元
$bizcontent['product_code'] = 'QUICK_MSECURITY_PAY'; // 销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
$bizcontent = json_encode($bizcontent, 256);
// 回调地址
$request->setNotifyUrl($notify_url);
// 设置下单数据
$request->setBizContent($bizcontent);
//这里和普通的接口调用不同,使用的是sdkExecute
$response = $aop->sdkExecute($request);
if(!$response){
$data = [];
$data['code'] = 201;
$data['msg'] = lang('error');
return $data;
}
$_data = str_replace("&","&",htmlspecialchars($response));
$data = [];
$data['code'] = 200;
$data['msg'] = lang('success');
$data['data'] = $_data;
return $data;
} catch (\Exception $e) {
$data = [];
$data['code'] = 201;
$data['msg'] = lang('error');
return $data;
}
}
// h5 - 支付宝支付
public function alih5pay($total_amount, $out_trade_no, $notify_url)
{
$notify_url = '域名'.$notify_url;
$config = config('aliPay');
// code...
try {
// 实例化 AopClient
$aop = new \AopClient();
// 支付宝网关地址
$aop->gatewayUrl = $config['gatewayUrl'];
// 支付宝APPID
$aop->appId = $config['appId'];
// 开发者私钥
$aop->rsaPrivateKey = $config['rsaPrivateKey'];
// 返回格式
$aop->format = $config['format'];
// 字符编码utf8
$aop->charset = $config['charset'];
// 加密方式
$aop->signType = $config['signType'];
// 请填写支付宝公钥,一行字符串
$aop->alipayrsaPublicKey = $config['alipayrsaPublicKey'];
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
$request = new \AlipayTradeWapPayRequest();
// 下单数据
$bizcontent = [];
$bizcontent['body'] = lang('购买商品')."-".$out_trade_no; // 交易的具体描述信息。
$bizcontent['subject'] = lang('购买商品,订单号:').$out_trade_no; // 商品的标题/交易标题/订单标题/订单关键字
$bizcontent['out_trade_no'] = "$out_trade_no"; // 唯一订单号
$bizcontent['timeout_express'] = '30m'; // 该笔订单允许的最晚付款时间,逾期将关闭交易
$bizcontent['total_amount'] = (String) round($total_amount/100,2); // 订单总金额,单位为元
$bizcontent['product_code'] = 'QUICK_WAP_WAY'; // 销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
$bizcontent = json_encode($bizcontent, 256);
// 回调地址
$request->setNotifyUrl("$notify_url");
// 设置下单数据
$request->setBizContent($bizcontent);
//这里和普通的接口调用不同,使用的是sdkExecute
$response = $aop->pageExecute($request);
if(!$response){
$data = [];
$data['code'] = 201;
$data['msg'] = lang('error');
return $data;
}
$data['code'] = 200;
$data['msg'] = lang('success');
$data['data'] = $response;
return $data;
} catch (\Exception $e) {
$data = [];
$data['code'] = 201;
$data['msg'] = lang('error');
return $data;
}
}
// 订单回调 - ali - 藏品购买
public function orderAliNotify()
{
//file_put_contents("1111111112ooo.txt","Runoob");
$param = input();
// 接收参数
$out_trade_no = $param['out_trade_no'];// 商户订单号
$total_amount = $param['total_amount']; //金额
$app_id = $param['app_id']; // 商户appID
trace(['app_id'=>$app_id,'out_trade_no'=>$out_trade_no,'total_amount'=>$total_amount], 'aliError');
unset($_REQUEST['s']);
$config = config('aliPay');
// 回调验证
$aop = new \AopClient;
$aop->alipayrsaPublicKey = $config['alipayrsaPublicKey'];
$flag = $aop->rsaCheckV1($_REQUEST, NULL, "RSA2");
// 格式化请求信息
$request = json_encode($_REQUEST);
trace(['post_data'=>$_POST], 'aliError');
// 验证失败日志记录
if(!$flag){
trace('回调验证失败:'.$request, 'aliError');
exit();
}
// 商户app 判断
if($app_id != config('alipay.appId')){
trace('appid不正确:'.$request, 'aliError');
exit();
}
// 订单号判断
if(!$out_trade_no){
trace('阿里支付-缺少订单号:'.$request, 'aliError');
exit();
}
// 金额判断
if(!$total_amount){
trace('阿里支付-缺少金额:'.$request, 'aliError');
exit();
}
if($_REQUEST['trade_status'] == 'TRADE_SUCCESS'){
// 订单处理
$service = new NtfOrderService();
$res = $service->orderMain($param);
if($res['code'] != 0)
{
trace('阿里支付-:'.$res['msg'].$request, 'aliError');
exit();
}
//日志回调
trace('阿里支付-支付成功:'.$request, 'success');
}
// return
echo 'success';
}