thinkphp支付宝手机支付流程提示

  
 
     //统一下单
     public  function  pay(){
       if($_GET['gid']!=''){
             vendor('Ali.wappay.buildermodel.AlipayTradeWapPayContentBuilder');
             vendor('Ali.wappay.service.AlipayTradeService');
               $payRequestBuilder = new \AlipayTradeWapPayContentBuilder();
                   $config=C('config');
                    //找出对应商品信息
                   $data=M('drink_shop_goods')->where(array('id'=>$_GET['gid'],'mac_id'=>$_SESSION['mac_id']))->find();
                   $machine=M('drink_machine')->where(array('init_code'=>$_SESSION['mac_id']))->find();
                   if(!$machine){
                      return;
                   }
                    //商户订单号,商户网站订单系统中唯一订单号,必填
                    $out_trade_no=date('Ymd').rand(1000,9999).substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 5, 13), 1))), 4, 12);
                    //订单名称,必填
                    $subject='凹凸帮';
                    //付款金额,必填
                   //$total_amount='0.01';
                     $total_amount=$data['shop_good_price'];
                    //商品描述,可空
                    $body='凹凸帮情趣用品';
                    //添加数据库
                     $map['out_trade_no']=$out_trade_no;
                     $map['shop_good_name']=$data['shop_good_name'];
                     $map['shop_good_price']=$data['shop_good_price'];
                     $map['create_time']=time();
                     $map['init_price']=$data['init_price'];
                     $map['pay_way']='支付宝';
                     $map['box']=$data['box'];
                     $map['mac_id']=$data['mac_id'];
                     $map['owner']=$machine['owner'];
                     $map['fxs_name']= $machine['owner'];
                     $oid=M('drink_sold_goods')->add($map);
                    //超时时间
                    $timeout_express="1m";
                    $return_url="http://syatb.veiding.com/home/alipay/return_url";
                    $notify_url="http://syatb.veiding.com/home/alipay/notify_url";
                    $payRequestBuilder = new \AlipayTradeWapPayContentBuilder();
                    $payRequestBuilder->setBody($body);
                    $payRequestBuilder->setSubject($subject);
                    $payRequestBuilder->setOutTradeNo($out_trade_no);
                    $payRequestBuilder->setTotalAmount($total_amount);
                    $payRequestBuilder->setTimeExpress($timeout_express);
                    $payResponse = new \AlipayTradeService($config);
                    $result=$payResponse->wapPay($payRequestBuilder,$return_url,$notify_url);
                    return ;
          }
       }
          //支付宝页面跳转同步通知页面
             public  function  return_url(){
                  vendor('Ali.wappay.service.AlipayTradeService');
                  $config=C('config');
                  $arr=$_GET;
                  $alipaySevice = new \AlipayTradeService($config); 
                  $result = $alipaySevice->check($arr);
                  //file_put_contents('./ali_check.txt',var_export($_GET,true));
                  /* 实际验证过程建议商户添加以下校验。
                  1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
                  2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
                  3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
                  4、验证app_id是否为该商户本身。
                  */
                  if($result) {//验证成功
                      
                      //请在这里加上商户的业务逻辑程序代码


                      //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                      //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
                      $url="http://syatb.veiding.com/home/test/new_index?mac_id=".$_SESSION['mac_id'];
                      header("Location:".$url); 




                      //商户订单号


                      //$out_trade_no = htmlspecialchars($_GET['out_trade_no']);


                      //支付宝交易号


                     // $trade_no = htmlspecialchars($_GET['trade_no']);


                      //echo "验证成功<br />外部订单号:".$out_trade_no;


                      //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——


                      /
                  }else {
                      //验证失败
                      echo "验证失败";
                  }
            }
  
         //支付宝服务器异步通知页面
       
         public  function  notify_url(){
              vendor('Ali.wappay.service.AlipayTradeService');
                 $config=C('config');
                $arr=$_POST;
                $alipaySevice = new \AlipayTradeService($config); 
                //$alipaySevice->writeLog(var_export($_POST,true));
                $result = $alipaySevice->check($arr);
                
           
                /* 实际验证过程建议商户添加以下校验。
                1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
                2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
                3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
                4、验证app_id是否为该商户本身。
                */
                if($result) {//验证成功
                    /
                    //请在这里加上商户的业务逻辑程序代
                        


                    //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——


                    //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
                    if($_POST['trade_status'] == 'TRADE_SUCCESS'){
                    //商户订单号
                         $out_trade_no = $_POST['out_trade_no'];
                       if($res=M('drink_sold_goods')->where(array('out_trade_no'=>$out_trade_no))->find()){
                           if($res['shop_good_price']==$_POST['invoice_amount'] && $_POST['seller_email']=='791936365@qq.com'){
                                //修改订单状态
                                M('drink_sold_goods')->where(array('out_trade_no'=>$out_trade_no))->save(array('sold_status'=>'已支付','noncestr'=>$_POST['notify_id']));
                                //查询机台
                                $machine=M('drink_machine')->where(array('init_code'=>$res['mac_id']))->field('client_id')->find();
                                //发送出货指令
                                $url="http://syatb.veiding.com/Alisend.php?client_id=".$machine['client_id']."&box=".$res['box']."&oid=".$res['id']."&noncestr=".$_POST['notify_id'];
                                $yap=$this->http_get($url);
                
                                
                             }
                        }
                    }    
                    echo "success";		//请不要修改或删除
                }else {
                    //验证失败
                    echo "fail";	//请不要修改或删除


                }
         }
         //退款
           public function  order_refund(){
              if($_GET['oid']!==''){
                  vendor('Ali.wappay.service.AlipayTradeService');
                 vendor('Ali.wappay.buildermodel.AlipayTradeRefundContentBuilder.php');
                 $config=C('config');
                      //商户订单号和支付宝交易号不能同时为空。 trade_no、  out_trade_no如果同时存在优先取trade_no
                      $res=M('drink_sold_goods')->where(array('id'=>$_GET['oid']))->find();
                      //商户订单号,和支付宝交易号二选一
                      $out_trade_no = $res['out_trade_no'];
                      //退款金额,不能大于订单总金额
                      $refund_amount=$res['shop_good_price']; //退款的原因说明
                      $refund_reason='出货失败';
                      //标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传。
                      $out_request_no=date('YmdHis');
                      $RequestBuilder = new \AlipayTradeRefundContentBuilder();
                      //$RequestBuilder->setTradeNo($trade_no);
                      $RequestBuilder->setOutTradeNo($out_trade_no);
                      $RequestBuilder->setRefundAmount($refund_amount);
                      $RequestBuilder->setRefundReason($refund_reason);
                      $RequestBuilder->setOutRequestNo($out_request_no);


                      $Response = new \AlipayTradeService($config);
                      $result=$Response->Refund($RequestBuilder);
                     file_put_contents('alirefund.txt',$result);
              }
               
           }
   
  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值