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