tp3实现微信公众号支付
ThinkPHP  /  管理员 发布于 7年前   984
1.首先拿到APPID,MCHID,KEY,APPSECRET,NOTIFY_URL,然后在WxPayConfig填写;
2.授权目录url直接到支付方法;
3.回调写你自己的回调url;
4.把官方demo下载放在verdor目录 我的放在 http://houtizong.iask.in/tp5blog/index/download/
控制器: //weix支付 public function wxpay() { Vendor('lib.JSSDK'); Vendor('lib.WxPayJsApiPay'); Vendor('lib.log'); Vendor('lib.WxPayApi'); //实例化JSSDK $jssdk=new \JSSDK(C('appid'),C('appSecret')); //获取数据 $signPackage =$jssdk->GetSignPackage(); //初始化日志 $logHandler= new \CLogFileHandler("./logs/".date('Y-m-d').'.log'); $loginfo=\Log::Init($logHandler, 15); //①获取用户openid $tools=new \JsApiPay(); $openId = $tools->GetOpenid(); //②统一下单 $input=new \WxPayUnifiedOrder(); $input->SetBody("公益捐款"); //设置商品或支付单简要描述 $input->SetAttach("附加数据"); //设置附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 $input->SetOut_trade_no(\WxPayConfig::MCHID.date("YmdHis")); //设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号 $input->SetTotal_fee("1"); //设置订单总金额,只能为整数,详见支付金额 $input->SetTime_start(date("YmdHis")); //设置订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则 $input->SetTime_expire(date("YmdHis",time()+ 600)); //设置订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则 $input->SetGoods_tag("商品标记"); //设置商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠 $input->SetNotify_url("xxx/index/wxcall");//设置接收微信支付异步通知回调地址 $input->SetTrade_type("JSAPI"); //设置取值如下:JSAPI,NATIVE,APP,详细说明见参数规定 $input->SetOpenid($openId); //设置trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 $order = \WxPayApi::unifiedOrder($input); $jsApiParameters=$tools->GetJsApiParameters($order); $this->assign('jsApiParameters',$jsApiParameters); $this->assign('signPackage',$signPackage); $this->display(); } //回调 public function wxcall() { // $xml = $GLOBALS['HTTP_RAW_POST_DATA']; // // 这句file_put_contents是用来查看服务器返回的XML数据 测试完可以删除了 // file_put_contents('./Application/Public/log.txt',$xml,FILE_APPEND); // //将服务器返回的XML数据转化为数组 // //$data = json_decode(json_encode(simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA)),true); // $data = xmlToArray($xml); // // 保存微信服务器返回的签名sign // $data_sign = $data['sign']; // // sign不参与签名算法 // unset($data['sign']); // $sign = $this->makeSign($data); // // 判断签名是否正确 判断支付状态 // if ( ($sign===$data_sign) && ($data['return_code']=='SUCCESS') && ($data['result_code']=='SUCCESS') ) { // $result = $data; // // 这句file_put_contents是用来查看服务器返回的XML数据 测试完可以删除了 // file_put_contents('./Application/Public/log1.txt',$xml,FILE_APPEND); // //获取服务器返回的数据 // $order_sn = $data['out_trade_no']; //订单单号 // $order_id = $data['attach']; //附加参数,选择传递订单ID // $openid = $data['openid']; //付款人openID // $total_fee = $data['total_fee']; //付款金额 // //更新数据库 // $this->updateDB($order_id,$order_sn,$openid,$total_fee); // }else{ // $result = false; // } // // 返回状态给微信服务器 // if ($result) { // $str=''; // }else{ // $str=''; // } // echo $str; // return $result; }
<!DOCTYPE html> <html> <script> (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function () { var clientWidth = docEl.clientWidth; if (!clientWidth) return; if(clientWidth>=640){ docEl.style.fontSize = '100px'; }else{ docEl.style.fontSize = 100 * (clientWidth / 640) + 'px'; } }; if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false); doc.addEventListener('DOMContentLoaded', recalc, false); })(document, window); </script> <head> <meta charset="utf-8"> <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1"> <script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js" type="text/javascript" charset="utf-8"></script> <title>wxpay</title> </head> <body> <div class="pay" style="margin:0 auto"> <p style="font-size: 20px;">商品名称:侯哥支付</p> <p style="font-size: 20px;">金额大小:1分钱</p> <span id="zhifu" style="margin:0 auto;width:237px;height:72px;border: 1px solid #DECECE;font-size: 20px;padding: 10px;border-radius: 5px;"> 去支付 </span> </div> </body> <script> onload=function() { document.getElementById('zhifu').addEventListener('touchstart',function() { if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', jsApiCall, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall); } }else{ jsApiCall(); } function jsApiCall() { WeixinJSBridge.invoke( 'getBrandWCPayRequest', {$jsApiParameters}, function(res){ WeixinJSBridge.log(res.err_msg); if(res.err_msg.indexOf('ok')!=-1){ localStorage.clear(); //location.href='{:U('wxpay')}' } } ); } }); } </script> </html>
效果图:
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号