资讯专栏INFORMATION COLUMN

PHP PC端微信扫码支付【模式二】详细教程-附带源码

Sike / 3546人阅读

摘要:微信支付订单查询页面初始化日志写的太差,请见谅遇到问题了搜索群老司机邪会群号撸主正是群主大大。

PC端微信扫码支付

博主写这破玩意儿的时候花了大概快两天时间才整体的弄懂逻辑,考虑了一下~还是把所有代码都放出来给大家~抱着开源大无私的精神!谁叫我擅长拍黄片呢?同时也感谢我刚入行时候那些无私帮过我的程序员们!

首先还是先给大家上效果图吧(样式我也会一并给大家的,漂亮吧?骚年们!)!


各位骚年们~请不要着急往下看代码,先给大家解释怎么获取到的二维码

上面的这图,用到了Jquery,Layer这两个js,大家请自己下载一下(链接自己点文字就行)。

整个流程简绍:点击支付后调用layer弹出窗口->ajax获取支付的二维码->轮询支付状态!

补充!不要当心轮询占用服务器资源的问题~因为假如同时有上万人等着支付的话,我相信你公司不会缺服务器这点小钱了!所以放心用吧!另外~按照我的逻辑来说应该是非常安全。请大家耐心看下去,虽然代码拿去就能用!但还是希望授之以渔!

ok!下面正式开始了哟!~大家注意仔细阅读代码。


第一步 首先把官方的微信demo下载下来进行配置部署

给大家个传送门-> PHP微信支付demo下载

 拿到文件后解压,解压后把文件夹改名为payment(也可以随意改,但是博主觉得这样规范点!)而后上传至项目的根目录,各位大佬不知道什么是根目录就请看这(/).其实我是逗你们的。
 
 
 而后进入微信的商户后台,设置api的key注意看下图(网上随意找的~丑了点,将就吧!)设置完后,下载证书文件。而后把证书解压出来!放到微信支付demo里面,也就是上一步上传服务器的demo文件夹中!下面是详细步骤:

设置密钥(如图)

下载证书,得到压缩文件夹,解压后上传到payment中的cert中!(如图,图上有路径)

在此顺便给logs文件夹(支付日志)一个写入的权限

修改微信支付demo中的配置文件WxPay.Config.php(如图:路径)

//只用修改第25、26、27、28行(示例)
const APPID = "wx2a3f1e5246886123";    //微信公众号的APPID
const MCHID = "1300778123";     //微信商户号   
const KEY = "619fd0f3f9c64550964bbe5b94dba123";     //微信商户密钥(上面步骤中设置的那个)
const APPSECRET = "5c8289b72600936f813ec1939e68f123";     //微信公众号的APPSECRET

第一步分的配置咋们就完成了,请各位大佬继续跟着小的往下走!

第二部 调整前段代码 大部分都是JS,不懂JS得直接略过吧,否则看着难受!

对于点击后弹出支付的这一块逻辑,撸主的思路是:点击支付按钮->执行Ajax获取到二维码展示在页面->开始执行轮询获取支付状态;(撸主虽然JS很菜,但是每一条代码后面都会注释给大家,比我菜的可以看一下)

创建获取二维码的文件 getPayQrcode.php

]*?srcs*=s*("|")(.*?)1[^>]*?/?s*>/i",$data,$matches);
    preg_match("/||(.*)||/",$matches[0],$aac);
    // 构造返回信息
    $obj["status"] = "success";
    $obj["code"] = $aac[1];    // 此值为返回交易码【用来确认订单支付状态的】
    $obj["price"] = $goodsPrice;
    $obj["msg"] = "/payment/example/".$matches["2"]; // 请求返回的二维码
    return json_encode($obj);// 返回json
    // 获取二维码的文件已经ok!继续下一步

设置微信支付demo中的扫码支付文件 payment/example/native.php

//在大概19行找到该代码 $notify = new NativePay(); 并在下方添加获取商品名字和商品价格的代码
// 接收get过来的商品价格和名称
$goodsPrice = $_GET["goodsPrice"];
$goodsName = $_GET["goodsName"];
//下面修改从第32号开始的一大堆$input开头的
$input = new WxPayUnifiedOrder();
$input->SetBody($goodsName);//商品名称
$input->SetAttach("大姨妈商城");//自己设置
$num = WxPayConfig::MCHID.date("YmdHis");//订单号
$input->SetOut_trade_no($num);
$input->SetTotal_fee($goodsPrice*100);//注意!!!!!!!!!由于是以分为单位结算,所以一定要记得商品价格*100;别到时候下岗了来怪撸主
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag($goodsName);//下面的这些参数大家自己看一下文档吧!意义都不大,撸主肾虚,要早点写完早点睡!
$input->SetNotify_url("/payment/example/notify.php");
$input->SetTrade_type("NATIVE");
$input->SetProduct_id("123456789");
$result = $notify->GetPayUrl($input);
//print_r($result);//最终的信息,大家可以打印了进行调试
$url2 = $result["code_url"];
// ok!整个文件的PHP代码就完毕了!在这以下的html代码全部把它干掉,把撸主准备的这段贴上去 这段代码不做什么解释了,也是用于查询订单状态的轮询,调试用的~!下面还会用到一次,讲的很详细


    
     
    微信支付样例


    
扫描支付模式二

0

微信支付demo订单查询文件 payment/example/orderquery.php

header("Access-Control-Allow-Origin:*"); // 因为撸主的支付实在另外一台服务器上,所以给了一个域头
ini_set("date.timezone","Asia/Shanghai");// 设置一下时区
error_reporting(E_ERROR); // 关闭报错
require_once "../lib/WxPay.Api.php";
require_once "log.php";
 
//初始化日志
$logHandler= new CLogFileHandler("./logs/".date("Y-m-d").".log");
$log = Log::Init($logHandler, 15);
 
function printf_info($data)
{
    foreach($data as $key=>$value){
        echo "$key : $value 
"; } } // 一下两个if的判断均为判断订单的状态,这里撸主建议去微信官网进行查阅,下面有传送门送你过去 if(isset($_REQUEST["transaction_id"]) && $_REQUEST["transaction_id"] != ""){ $transaction_id = $_REQUEST["transaction_id"]; $input = new WxPayOrderQuery(); $input->SetTransaction_id($transaction_id); //printf_info(WxPayApi::orderQuery($input)); $result=WxPayApi::orderQuery($input); echo $result["trade_state"]; exit(); } 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); //printf_info(WxPayApi::orderQuery($input)); $result=WxPayApi::orderQuery($input); $status["code"] = $result["trade_state"]; $status["openid"] = $result["openid"]; $status["total_fee"] = $result["total_fee"]; $status["transaction_id"] = $result["transaction_id"]; $status["time"] = $result["time_end"]; //print_r($result); print_r(json_encode($status)); exit(); }

传送门 微信返回错误代码解释

点击支付按钮的代码

// 前段代码 样式用大家自己的就行,不用照抄
立即购买
// JS代码 js代码中嵌入的样式,无需修改!和效果图一样的! //接入微信扫码支付 function GetPay() { // 用ajax获取到支付的二维码 var payQrcode = ""; var payPrice = ""; var payOrderCode = ""; // 执行Ajax请求 $.get("/getPayQrcode.php",{"goodsId":"商品的ID"},function(ret){ var obj = JSON.parse(ret) // 把字符串进行转换 // 判断返回数据是否正常(由于请求一般不会出问题,所以在获取二维码的getPayQrcode.php文件没有写返回fail) if (obj.status == "success") { payQrcode = "http://www.baidu.com"+obj.msg;//二维码链接 payPrice = obj.price; //商品价格 payOrderCode = obj.code; //交易码 //执行layer弹层 layer.open({ type: 1, skin: "layui-layer-demo", //样式类名,随意! closeBtn: 0, //不显示关闭按钮 title:false, //关闭title部分 anim: 2, area: ["300px", "450px"], //层的宽高 shadeClose: true, //开启遮罩关闭 content: "
X
"+"

请打开微信 扫码进行支付
支付金额:"+payPrice+"
"+"

请打开微信 扫码进行支付
支付金额:"+payPrice+"
"+"
微信支付样例
扫描支付模式二

0

微信支付demo 订单查询页面

$value){
        echo "$key : $value 
"; } } if(isset($_REQUEST["transaction_id"]) && $_REQUEST["transaction_id"] != ""){ $transaction_id = $_REQUEST["transaction_id"]; $input = new WxPayOrderQuery(); $input->SetTransaction_id($transaction_id); //printf_info(WxPayApi::orderQuery($input)); $result=WxPayApi::orderQuery($input); echo $result["trade_state"]; exit(); } 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); //printf_info(WxPayApi::orderQuery($input)); $result=WxPayApi::orderQuery($input); $status["code"] = $result["trade_state"]; $status["openid"] = $result["openid"]; $status["total_fee"] = $result["total_fee"]; $status["transaction_id"] = $result["transaction_id"]; $status["time"] = $result["time_end"]; //print_r($result); print_r(json_encode($status)); exit(); } ?>
写的太差,请见谅;遇到问题了!~搜索QQ群:phpcode【老司机邪会】群号:202692399 撸主正是群主大大。美女进来享受撸主亲自一对一贴身手把手指导!

Wishes everybody to be happy everyday!
ok,bye!撸主要给客户继续写东西了!~否则明天揭不开锅了!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22488.html

相关文章

  • 自定义微信登录扫码样式解决办法

    摘要:微信扫码登录近期做一个端微信扫码登录的需求,微信扫码有两种方式,一种是新开一个二维码页面,另一种是内嵌入产品网页。幸运的是,微信留了一个给我们自定义样式的机会,在之前实例化一个二维码的时候,实例对象中属性,允许设置样式。 PC微信扫码登录 近期做一个PC端微信扫码登录的需求,微信扫码有两种方式,一种是新开一个二维码页面,另一种是内嵌入产品网页。本次以内嵌二维码为例,具体怎样在页面中显示...

    meteor199 评论0 收藏0
  • 自定义微信登录扫码样式解决办法

    摘要:微信扫码登录近期做一个端微信扫码登录的需求,微信扫码有两种方式,一种是新开一个二维码页面,另一种是内嵌入产品网页。幸运的是,微信留了一个给我们自定义样式的机会,在之前实例化一个二维码的时候,实例对象中属性,允许设置样式。 PC微信扫码登录 近期做一个PC端微信扫码登录的需求,微信扫码有两种方式,一种是新开一个二维码页面,另一种是内嵌入产品网页。本次以内嵌二维码为例,具体怎样在页面中显示...

    yexiaobai 评论0 收藏0
  • 微信第三方登录接口开发

    摘要:相关资料博客微信第三方登录接口开发端微信扫码登录文档移动端网页微信公众平台授权登录微信开放平台登录与微信公众平台授权登录区别在哪微信登录接口几个问题微信登录的和区别百分号编码在线转换第三方登录 微信登录接口开发须知 APP登录接口 PC网站登录接口 微信移动网页登录接口(又称微信公众号授权登录) 移动端非微信自带浏览不支持微信登录 微信移动网页登录接口(又称微信公众号授权登录) ...

    ziwenxie 评论0 收藏0
  • 聊聊维码登录

    摘要:场景主要的场景有如下几个扫二维码登录版系统比如微信版,在手机端微信登录的前提下,扫二维码确认,自动登录网页版。小结二维码扫描登录是个挺潮流的功能,这要求既有系统增加改造,也要求针对这种形式的登录带来潜在的攻击进行安全防范。 序 本文主要来研究一下二维码登录的相关场景和原理。 场景 主要的场景有如下几个: app扫二维码登录pc版系统 比如微信web版,在手机端微信登录的前提下,扫二维码...

    Tikitoo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<