qa-ifish7/web/Application/Shop/Controller/PayController.class.php

150 lines
5.9 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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,
));
}
}