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