微信支付——扫码支付模式二

原创 2016年08月30日 13:59:29
项目环境:thinkphp商城
在上篇文章,已经调通sdk写引入进来到thinkPHP中
扫码模式支付二相对来说比较简单,没有多少坑,难点就是支付成功的回调页面,写一个ajax请求每隔3秒执行一次查询
1,支付页面控制器做一个判断,是否是wenxin支付方式进来
if( $paytype == "weixin"){   //若付款扫描支付方式是微信进入 不是进入else

            if(!empty($_POST['orderid'])){
               $order_no=safe_replace(I('post.orderid'));

               $info=M("order")->where("tag='$order_no'")->find();
               if(!empty($info)){
                  $money=$info['total_money'];
               } else{
                  $info=M("order")->where("orderid='$order_no'")->find();
                  $money=$info['total_money'];
               }
               $body= C('SITENAME')."订单支付";//商品描述
               $title=C('SITENAME')."订单支付";//设置商品名称
            }
            $money = $money * 100; //微信默认是分为单位,剩100

            //使用统一支付接口
            $input = new \WxPayUnifiedOrder();
            $notify = new \NativePay();

            $input->SetBody("$body");
            $input->SetAttach("$title");
            $input->SetOut_trade_no(\WxPayConfig::MCHID.date("YmdHis"));
            $input->SetTotal_fee($money);
            $input->SetTime_start(date("YmdHis"));
            $input->SetTime_expire(date("YmdHis", time() + 600));
            $input->SetGoods_tag("test");
            $input->SetNotify_url("http://luochao.tunnel.qydev.com/yershopv/index.php/Pay/notify.html");
            $input->SetTrade_type("NATIVE");
            $input->SetProduct_id($_POST['orderid']);
            $result = $notify->GetPayUrl($input);


            $out_trade_no = $input->GetOut_trade_no();

            $url2 = $result["code_url"];

            //获取统一支付接口结果
            $unifiedOrderResult = $result;

            //商户根据实际情况设置相应的处理流程
            if ($unifiedOrderResult["return_code"] == "FAIL")
            {
               //商户自行增加处理流程
               echo "通信出错:".$unifiedOrderResult['return_msg']."<br>";
            }
            elseif($unifiedOrderResult["result_code"] == "FAIL")
            {
               //商户自行增加处理流程
               echo "错误代码:".$unifiedOrderResult['err_code']."<br>";
               echo "错误代码描述:".$unifiedOrderResult['err_code_des']."<br>";
            }
            elseif($unifiedOrderResult["code_url"] != NULL)
            {
               //从统一支付接口获取到code_url
               $code_url = $unifiedOrderResult["code_url"];
               //商户自行增加处理流程
               //......
            }

            $this->assign('orderid',$_POST['orderid']);
            $this->assign('out_trade_no',$out_trade_no);
            $this->assign('code_url',$url2);
            $this->assign('unifiedOrderResult',$unifiedOrderResult);
            $this->display('native_pays');

         }


2,视图页面native_pays显示二维码,3秒调用ajax执行查询是否已经支付,支付完就跳转页面
<script src="__JS__/jquery.min.js"></script>  //

    <div align="center" id="qrcode">
    </div>
    <div align="center">
        <input type="hidden" value="{$out_trade_no}" name="out_trade_no">
        <input type="hidden" value="{$orderid}" name="orderid">
        <p>订单号:{$out_trade_no}</p>
        <p>url2:{$code_url}</p>
    </div>


    <script src="__JS__/qrcode.js"></script>  //生成二维码脚本必须
    <script>
        if(<?php echo $unifiedOrderResult["code_url"] != NULL; ?>)
        {
            var url = "<?php echo $code_url;?>";
            //参数1表示图像大小,取值范围1-10;参数2表示质量,取值范围'L','M','Q','H'
            var qr = qrcode(10, 'M');
            qr.addData(url);
            qr.make();
            var wording=document.createElement('p');
            wording.innerHTML = "扫我,扫我";
            var code=document.createElement('DIV');
            code.innerHTML = qr.createImgTag();
            var element=document.getElementById("qrcode");
            element.appendChild(wording);
            element.appendChild(code);
        }
    </script>
<script>
    $(function(){
        setInterval(function(){check()} , 3000);  //没隔三秒执行一次 ajax
        function check(){
            var out_trade_no = $("input[name=out_trade_no]").val();
            var orderid = $("input[name=orderid]").val();
            var param = {
                'out_trade_no':out_trade_no,
                'orderid':orderid,
            };
            $.ajax({
                type: "post",
                url: '{:U("Pay/orderquery")}',  //请求函数
                async: false,
                data: {'out_trade_no':out_trade_no,'orderid':orderid},
                success: function (data) {
                    if (data == "SUCCESS") {
                        alert("订单支付成功,即将跳转...");
                        window.location.href = '{:U("Home/Pay/over")}';
                    }
                    else {
                        result = false;
                    }
                }
            });
            /***************/

        }

    })
</script>
3,ajax请求方法处理,
传微信的商户订单号:用在查询微信订单接口返回信息
商城生成的订单号,支付成功把此订单号改为已支付状态
/**
 * AJAX方法查询订单号,返回信息处理
 */

public function orderquery($out_trade_no=null, $orderid=null){
   $out_trade_no = $_POST['out_trade_no'];
   $orderid = $_POST['orderid'];

   /****调用微信接口,返回支付后的参数*****/
   if(isset($out_trade_no) && $out_trade_no != ""){
      $out_trade_no = $_REQUEST["out_trade_no"];
      $input = new \WxPayOrderQuery();
      $input->SetOut_trade_no($out_trade_no);
      $result  = \WxPayApi::orderQuery($input);
   }

   /*判断是否支付成功*/
   if ( $result["trade_state"] == "SUCCESS" ){
      /**订单支付成功操作*/
      $money = $result["total_fee"]/100; //获取微信支付金额,给到success

      /*修改订单状态为已支付*/
      $dataa = array('status'=>'1','ispay'=>'2');//订单已经支付,状态为已提交
      $info = M('order')->where(array('tag' => $orderid))->setField($dataa);
      if(!empty($info)){
      } else{
         M('order')->where(array('orderid' => $orderid))->setField($dataa);
      }
      /*支付完后写入到支付表中*/
      M("Pay")->add(array(
            'out_trade_no' => $out_trade_no,
            'money' => $money,
            'status' => 0,
            'create_time' => time(),
            'update_time' => time()
            ));
   }
   $data = $result["trade_state"];
   $this->ajaxReturn($data);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

JAVA微信扫码支付模式二功能实现以及回调

一、准备工作首先吐槽一下微信关于支付这块,本身支持的支付模式就好几种,但是官方文档特别零散,连像样的JAVA相关的demo也没几个。本人之前没有搞过微信支付,一开始真是被它搞晕,折腾两天终于调通了,特...
  • wangqiuyun
  • wangqiuyun
  • 2016年04月25日 12:29
  • 59944

微信支付之-扫码支付-模式2(模式1)

微信商户申请开通:https://pay.weixin.qq.com/service_provider/index.shtml 注意:开通公众账号之后,然后根据流程开通相对应的商户平台 ...
  • q908555281
  • q908555281
  • 2016年06月13日 13:43
  • 6007

关于微信原生支付(扫码支付)的两种支付模式的理解和比较...

关于微信原生支付(扫码支付)的两种支付模式的理解和比较...     by:一起奋斗(转载请注明出处) 1.【模式一】:商户后台系统根据微信支付规则链接生成二维码,链接中带固定...
  • u011852706
  • u011852706
  • 2015年12月14日 21:40
  • 18643

Java微信支付开发之扫码支付模式二

官方文档点击查看 准备工作:已通过微信认证的公众号,域名可以不通过ICP备案 借鉴了很多大神的文章,在此先谢过了 大体过程:根据固定金额和商品的ID先生成订单,再生成二维码,客户扫一扫付款...
  • phil_jing
  • phil_jing
  • 2017年06月30日 01:44
  • 2701

微信支付之-扫码支付-模式2(模式1)

微信商户申请开通:https://pay.weixin.qq.com/service_provider/index.shtml 注意:开通公众账号之后,然后根据流程开通相对应的商户平台 ...
  • q908555281
  • q908555281
  • 2016年06月13日 13:43
  • 6007

微信扫码支付---模式二(Native)

/**  * 微信支付的类  * @author zp  */ public class Zhifu {     public static String weixin_pay() throws Ex...
  • zp159361
  • zp159361
  • 2016年10月26日 14:20
  • 631

Java微信支付开发之扫码支付模式二

官方文档点击查看 准备工作:已通过微信认证的公众号,域名可以不通过ICP备案 借鉴了很多大神的文章,在此先谢过了 大体过程:根据固定金额和商品的ID先生成订单,再生成二维码,客户扫一扫付款...
  • phil_jing
  • phil_jing
  • 2017年06月30日 01:44
  • 2701

thinkphp微信扫码支付模式二

1.参考本博客的博文《thinkphp3.2实现微信JSAPI支付》,在此基础上实现微信扫码支付只需做简单修改; 2.只需改WxPayAction里面pay函数里面三个地方: 1)将支付类...
  • zhengxiaojunkite
  • zhengxiaojunkite
  • 2016年01月21日 19:53
  • 3341

微信网页扫码支付模式一和模式二的适用场景

模式一和模式二提供了两种不同的能力,适用于不同的场景,看商户具体的需求。 两种模式,在支付的流程中,有一定的共同的流程: 1,生成订单。 2,用户支付。 差别在于: 模式一,先扫码,...
  • zxh_2581285470
  • zxh_2581285470
  • 2016年07月19日 10:37
  • 1610

php微信支付(仅pc端扫码支付模式二)详细步骤.----仅适合第一次做微信开发的程序员

本人最近做了微信支付开发,是第一次接触.其中走了很多弯路,遇到的问题也很多.为了让和我一样的新人不再遇到类似的问题,我把我的开发步骤和问题写出来,以供参考. 开发时间是2016/8/10,所以微信支付...
  • csdn_dengfan
  • csdn_dengfan
  • 2016年08月12日 12:34
  • 14002
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:微信支付——扫码支付模式二
举报原因:
原因补充:

(最多只允许输入30个字)