150 lines
5.9 KiB
PHP
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,
|
||
));
|
||
}
|
||
}
|