• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP:微信支付服务商开发相关的那点事

php 搞代码 4年前 (2022-01-20) 22次浏览 已收录 0个评论

项目背景

不是什么大项目,使用微信服务商来管理多个子商户,并使用服务商的接口替子商户下单,服务商后台才能接收到回调

使用场景是web扫码支付

准备

域名应该要在服务商所归属的公众号内“网页授权域名”设置好(不知此操作是否需要?)

在支付服务商后台设置好回调地址(子商户应该是不用设置)

项目使用apache+php为后台服务,下载官方支付php demo(native)

我们直接先按照demo的目录结构来玩,直接把解压的example和lib,2个目录都到服务器根目录

在example目录下,创建cert目录,进服务商后台-账户中心-api安全,下载证书,放到这个目录内

在example目录下,创建logs目录,用于微信支付log类写日志文件

由于微信支付相关都要使用https,所以查看访问日志在apache目录下的logs目录,ssl_request.txt文件,最下面,可以看到回调地址是否被请求

注意

官方demo有2个方式的扫码支付,第一种方式已经不提供,都使用第二种

官方的demo,会有不能显示二维码的bug,例子页面是native.php

打印print_r($result); 这个,会显示错误,主要是关于于curl的错误,自行百度解决

配置

在WxPay.Config.Interface.php中的接口对象中增加一个公共方法public abstract function GetSubMchId(); //获取子商户id在WxPay.Config.php内中,配置需要的参数,自行百度,并且增加一个方法public function GetSubMchId(){ return '8888888888'; //返回子商户号 by vbyzc }在lib/WxPay.Api.php 内,在统一下单方法unifiedOrder中,下面的参数那段位置,增加$inputObj->SetSub_mch_id($config->GetSubMchId());//子商户号 by vbyzc在各个需要查询订单的的地方回调,付款页面实时检测订单支付状态的请求页面,都要使用此方法来设置子商户id:
$input->SetSub_mch_id($config->GetSubMchId());注意,有的地方可能没有$config对象,请引入WxPay.Config.php ,并初始化:$config = new WxPayConfig();

部分代码

扫码页面:native.php

<?php/**** example目录下为简单的支付样例,仅能用于搭建快速体验微信支付使用* 样例的作用仅限于指导如何使用sdk,在安全上面仅做了简单处理, 复制使用样例代码时请慎重* 请勿直接直接使用样例对外提供服务* **/require_once "../lib/WxPay.Api.php";require_once "WxPay.NativePay.php";require_once 'log.php';//初始化日志$logHandler= new CLogFileHandler("logs/".date('Y-m-d').'.log');$log = Log::Init($logHandler, 15);//模式一//官方不再提供模式一支付方式$notify = new NativePay();//模式二/** * 流程: * 1、调用统一下单,取得code_url,生成二维码 * 2、用户扫描二维码,进行支付 * 3、支付完成之后,微信服务器会通知支付成功 * 4、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php) */$out_trade_no = "vbyzc_for_jstx".date("YmdHis"); $input = new WxPayUnifiedOrder();$input->SetBody("test_body");$input->SetAttach("test_Attach");//成功支付的回调里会返回这个$input->SetOut_trade_no($out_trade_no);//自定义订单号$input->SetTotal_fee("1"); // 金额$input->SetTime_start(date("YmdHis"));// $input->SetTime_expire(date("YmdHis", time() + 500));$input->SetGoods_tag("test_goodsTag");$input->SetNotify_url("https://service.ktfqs.com/example/wx_pay_callback.php");$input->SetTrade_type("NATIVE");$input->SetProduct_id("123456789"); //此id为二维码中包含的商品ID,商户自行定义。$result = $notify->GetPayUrl($input);$url2 = $result["code_url"];echo "<div>这是返回:$url2</div>";print_r($result);?><html><head>    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>    <meta name="viewport" content="width=device-width, initial-scale=1" />     <title>扫码支付</title>    <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script&<b>%本文@来源gao@!dai!ma.com搞$$代^@码!网</b><strong>搞代gaodaima码</strong>gt;</head><body>    <div style="margin-left: 10px;color:#556B2F;font-size:30px;font-weight: bolder;">扫描支付模式二</div><br/>    <div> 订单编号<input id="out_trade_no" type="hidden"  value="<?php echo $out_trade_no;?>"> </div>    <img alt="模式二扫码支付" src="qrcode.php?data=<?php echo urlencode($url2);?>" style="width:150px;height:150px;"/>    <div>支付提示:<span id="query_result" style="color: red">WAITING...</span></div>    <script>        var t1;        var sum=0;        $(document).ready(function () {            t1=setInterval("ajaxstatus()", 4000);        });        function ajaxstatus() {            sum++;            if(sum>100){ window.clearInterval(t1);return false;}            if ($("#out_trade_no").val() != 0) {                $.post("orderqueryajax.php", { out_trade_no:$("#out_trade_no").val() }, function (data) {                    data = $.trim(data);                    $("#query_result").html(data);                    if (data=="SUCCESS") {                        $("#query_result").html("哈哈哈!!支付成功,即将跳转...");                        window.clearInterval(t1)                        <?php                            // 插入php代码                            /*                            if (isset($_POST['history_go']) && $_POST['history_go'] == 3){                                echo 'window.setTimeout("history.go(-3);",2000);';                            }else{                                echo 'window.setTimeout("history.go(-2);",2000);';                            }                            */                        ?>                    }                });            }        }    </script></body></html>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP:微信支付服务商开发相关的那点事

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址