/** * 微信扫码支付 ---模式二 * @param $order_number 订单编号 * @param $money 订单金额(单位:元) * @param $notify_url 异步通知地址 * @return mixed 返回预支付url */ function wxpay($order_number,$money,$notify_url){ Vendor('Wxpay.example.WxPay#NativePay'); Vendor('Wxpay.lib.WxPay#Api'); Vendor('Wxpay.lib.WxPay#Data'); Vendor('Wxpay.lib.WxPay#Config'); Vendor('Wxpay.lib.WxPay#Exception'); $notify = new \NativePay(); $input = new \WxPayUnifiedOrder(); $input->SetBody('订单号:'.$order_number); //描述 //$input->SetAttach("$test"); //设置附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 $input->SetOut_trade_no($order_number); //订单号 $input->SetTotal_fee($money*100); //以分单位传入,只能传整数 $input->SetTime_start(date("YmdHis")); $input->SetTime_expire(date("YmdHis", time() + 60)); //$input->SetGoods_tag("test"); $input->SetNotify_url($notify_url); $input->SetTrade_type("NATIVE"); $input->SetProduct_id("123456789"); //此id为二维码中包含的商品ID,商户自行定义 $result = $notify->GetPayUrl($input); $url = $result["code_url"]; return $url; } //①将返回的预支付url分配到前端模板 //②通过img标签请求生成二维码<img id="weixinImageURL" src="{:U('Pay/code')}?url={$url}"> //生成二维码 public function code(){ $url = I('url'); Vendor('Wxpay.example.phpqrcode.phpqrcode'); \QRcode::png("$url"); } //③前端通过定时任务不断请求后台查询微信支付状态,根据返回状态做相应操作 $(function () { var myInt = setInterval(function () { check() },1000); function check() { var out_trade_no = $('.out_trade_no').val(); $.ajax({ type:'post', url:"{:U('Pay/orderquery')}", data:{'out_trade_no':out_trade_no}, success:function (e) { if(e == 1){ clearInterval(myInt); alert('订单支付成功,点击确认按钮跳转到订单页'); window.location.href="{:U('Index/shop_order')}" }else{ return false; } } }) } }) //查询微信支付状态 public function orderquery(){ ini_set('date.timezone','Asia/Shanghai'); error_reporting(E_ERROR); Vendor('Wxpay.lib.WxPay#Api'); Vendor('Wxpay.lib.WxPay#Data'); Vendor('Wxpay.lib.WxPay#Config'); Vendor('Wxpay.example.log'); //初始化日志 $logHandler= new \CLogFileHandler("./logs/".date('Y-m-d').'.log'); $log = \Log::Init($logHandler, 15); if(isset($_REQUEST["out_trade_no"]) && $_REQUEST["out_trade_no"] != ""){ $out_trade_no = $_REQUEST["out_trade_no"]; $input = new \WxPayOrderQuery(); $input->SetOut_trade_no($out_trade_no); $rult = \WxPayApi::orderQuery($input); if($rult['trade_state'] == 'SUCCESS'){ //支付成功 }elseif ($rult['trade_state'] == 'NOTPAY'){ //未支付 }elseif ($rult['trade_state'] == 'CLOSED'){ //已关闭 }elseif ($rult['trade_state'] == 'USERPAYING'){ //用户支付中 }elseif ($rult['trade_state'] == 'PAYERROR'){ //支付失败 } } } //支付成功后回调,查看微信返回数据可以通过file_put_contents()来查看 public function notify(){ $xml = $GLOBALS['HTTP_RAW_POST_DATA']; //返回的xml $xmlObj=simplexml_load_string($xml,'SimplexmlElement',LIBXML_NOCDATA); $xmlArr=json_decode(json_encode($xmlObj),true); $out_trade_no=$xmlArr['out_trade_no']; //订单号 $total_fee=$xmlArr['total_fee']/100; //回调回来的xml文件中金额是以分为单位的 $result_code=$xmlArr['result_code']; //状态 if($result_code=='SUCCESS'){ //数据库操作 //通过订单号查询订单状态 if($status['order_status'] != 1){ //没做处理 //判断订单总额是否一致 if($status['count_price'] == $total_fee){ //修改订单状态 //增加商品销量 echo 'SUCCESS'; //返回成功给微信端 } } }else{ //失败 echo 'FAIL'; exit; } }
微信扫码模式二
最新推荐文章于 2021-03-09 22:49:30 发布