Files
qc.ifish7.com/Application/Shop/Controller/PayController.class.php
T
2021-04-18 18:51:51 +08:00

150 lines
5.9 KiB
PHP

<?php
namespace Shop\Controller;
use Think\Controller;
class PayController extends Controller {
public function __construct() {
parent::__construct();
$this->order_id=I("get.order_id",0,"intval");
$this->order=M("shop_order")->find($this->order_id);
if(!$this->order){
$this->error("订单不存在");
}
if($this->order["is_pay"]){
$this->error("该订单已支付");
}
}
//线下付款
public function bankPay(){
if(I("get.is_submit")){
M("shop_order")->save(array(
"order_id"=>$this->order_id,
"is_offline_pay"=>1,
));
//设置订单状态
D("shop_order")->setOrderState($this->order_id);
//订单日志
D("shop_order")->log($this->order_id,"用户选择对公转账付款");
$this->success("操作成功");
}else{
$this->display();
}
}
//支付宝pc端支付
public function aliPay(){
if(isMobile()){
if(isWxClient()){
//$this->success("微信端不支持支付宝付款,请点击右上角【浏览器打开】这个链接,使用支付宝付款",U("Shop/ShopOrder/index"),60);
}
$this->aliWapPay();
}else{
$this->aliPcPay();
}
}
//支付宝pc端支付
public function aliPcPay(){
//
$proName="订单号:".$this->order["order_num"];
$out_trade_no=$this->order["order_num"];
$total_amount =$this->order['pay_money'];
$body="";
//
Vendor('AlipaySdk.aop.AopClient');
Vendor('AlipaySdk.aop.request.AlipayTradePagePayRequest');
$c = new \AopClient();
$config = C('alipay');
$c->gatewayUrl = $config['gatewayUrl'];;
$c->appId = $config['app_id'];
$c->rsaPrivateKey = $config['merchant_private_key'];
$c->format = "json";
$c->charset= "UTF-8";
$c->signType= "RSA2";
$c->alipayrsaPublicKey = $config['alipay_public_key'];
$request = new \AlipayTradePagePayRequest();
$request->setReturnUrl($config['return_url']);
$request->setNotifyUrl($config['notify_url']);
$request->setBizContent("{" .
" \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," .
" \"subject\":\"$proName\"," .
" \"out_trade_no\":\"$out_trade_no\"," .
" \"total_amount\":$total_amount," .
" \"body\":\"$body\"" .
" }");
$result = $c->pageExecute ($request);
//输出
echo $result;
}
//支付宝手机端支付
public function aliWapPay(){
Vendor('AlipaySdk.aop.AopClient');
Vendor('AlipaySdk.aop.request.AlipayTradeWapPayRequest');
Vendor('AlipaySdk.wappay.service.AlipayTradeService');
Vendor('AlipaySdk.wappay.buildermodel.AlipayTradeWapPayContentBuilder');
$c = new \AopClient();
$config = C('alipay');
//商户订单号,商户网站订单系统中唯一订单号,必填
$out_trade_no = $this->order["order_num"];
//订单名称,必填
$subject = "订单号:".$this->order["order_num"];
//付款金额,必填
$total_amount = $this->order['pay_money'];
//商品描述,可空
$body = "";
//超时时间
$timeout_express="1m";
$payRequestBuilder = new \AlipayTradeWapPayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setTimeExpress($timeout_express);
//这里要把return_url和notify_url重新改变成手机的
$config["return_url"]=$config['wap_return_url'];
$config["notify_url"]=$config['wap_notify_url'];
$payResponse = new \AlipayTradeService($config);
$result=$payResponse->wapPay($payRequestBuilder,$config['return_url'],$config['notify_url']);
}
//异步通知(PC支付)
public function notify_url(){
$arr=$_POST;
Vendor('AlipaySdk.pagepay.service.AlipayTradeService');
$alipaySevice = new \AlipayTradeService(C('alipay'));
$result = $alipaySevice->check($arr);
if($result){
$out_trade_no = $_POST['out_trade_no'];
$total_amount= $_POST['total_amount'];
if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
//这里加入商业逻辑处理
$order=D("shop_order")->where(array("order_num"=>$out_trade_no))->find();
//这里要判断是否is_pay为0才执行商业处理,防止异步通知执行两次以上从而造成多条付款明细
if($order&&!$order["is_pay"]){
M("shop_order")->save(array(
"order_id"=>$order["order_id"],
"is_pay"=>1,
));
//设置订单状态
D("shop_order")->setOrderState($order["order_id"]);
//订单日志
D("shop_order")->log($order["order_id"],"用户在线支付,金额:{$total_amount},支付方式:阿里云");
//
$this->payMent($order["order_id"],"alipay",json_encode($_POST));
}
}
echo "success";//请不要修改或删除
}else{
}
}
public function return_url(){
redirect(U("Shop/ShopOrder/index"));
}
//付款记录
private function payMent($orderid,$paytype,$detail){
M("shop_order_payment")->add(array(
"order_id" =>$orderid,
"addtime" =>time(),
"paytype" =>$paytype,
"detail" =>$detail,
));
}
}