支付宝APP支付 统一下单 php服务端 tp5


/*支付宝第三方支付

*
*生成APP支付订单信息
* @param number  uid 用户id
* @param string   token 用户token
* @param number  oid 订单id
* @param string   title 标题
* @param string    body 商品描述
* @parma float    money 金额
* @param number ordernum 订单编号
*/
    支付包官方文档   https://docs.open.aliyun.com/54/106370/
    public function zfb_pay()
    {
$data = input('post.');

Loader::import('/alipay/aop/AopClient',EXTEND_PATH);
$aop = new \AopClient();
$aop->appId = config("alipay_app_id");
$aop->rsaPrivateKey = config('alipay_private_key');
$aop->alipayrsaPublicKey = config('alipay_public_key');//对应填写
$aop->signType = "RSA2";
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
Loader::import('/alipay/aop/request/AlipayTradeAppPayRequest',EXTEND_PATH);
$request = new \AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数
$bizcontent = json_encode(array(
'body' => $data['body'], //商品描述
'subject' => $data['title'], //支付的标题,
'out_trade_no' => $data['ordernum'], //支付宝订单号必须是唯一的,只能生成一次
'total_amount' => $data['money'], //金额
"timeout_express" => "30m", //订单支付有效时间 m分钟 h小时
'product_code' => 'QUICK_MSECURITY_PAY'
));
$request->setNotifyUrl("http://tapi.zuozuobang.com/notifyurl");//你在应用那里设置的异步回调地址
$request->setBizContent($bizcontent);
//这里和普通的接口调用不同,使用的是sdkExecute
$response = $aop->sdkExecute($request);
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
/* echo htmlspecialchars($response);*///就是orderString 可以直接给客户端请求,无需再做处理。
if($response){
return_msg('200','支付宝请求成功!',$response);
}else{
return_msg('100','支付请求失败!',$response);
}
}

/*
* 支付宝支付回调
*/
public function notifyurl()
{

Loader::import('/alipay/aop/AopClient',EXTEND_PATH);
$aop = new \AopClient();
$aop->alipayrsaPublicKey =config('alipay_public_key');//对应填写
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
if ($flag) {
//校验通知数据的正确性
$out_trade_no = $_POST['out_trade_no']; //商户订单号
$trade_no = $_POST['trade_no']; //支付宝交易号
$trade_status = $_POST['trade_status']; //交易状态trade_status
$total_amount = $_POST['total_amount']; //订单的实际金额
$order = Db::table("shfw_order")->where('ordernum', $out_trade_no)->find();
if ($order) {
//只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。
if ($trade_status != 'TRADE_FINISHED' && $trade_status != 'TRADE_SUCCESS') {
return 'fail';
}
//2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
if ($total_amount != $order['money']) {
return 'fail';
}
//校验成功后在response中返回success,校验失败返回failure
$update = array(
'status' => '2', //修改支付状态
'zhi_time' => time(), //添加支付时间
'pay_type' => 1); //添加支付类型
$result = Db::table("shfw_order")->where('ordernum', $out_trade_no)->update($update);
$res = Db::table("shfw_order")->where('ordernum', $out_trade_no)->field('id,mid,ordernum,nickname,addtime,pay_type')->find();
// $member = Db::table('shfw_member')->where('id',$res['mid'])->find();
//添加充值记录
$res['payorder'] = $trade_no;
$res['money'] = $total_amount;
$addpay = $this->addpay($res);
if ($result && $addpay) {
return "success";
} else {
return 'fail';
}
} else {
exit('fail');
}
}
}

猜你喜欢

转载自www.cnblogs.com/Dgaozhen/p/9990753.html