参考二维码支付接口文档:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5

index.php

 <!DOCTYPE html>
<html>
<?php
// 生成随机数,长度为30位
function getNonceStr($length = 30)
{
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
$str ="";
for ( $i = 0; $i < $length; $i++ ) {
$str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);
}
return $str;
}
?>
<head>
<title></title>
</head>
<body>
<form action="pay.php" method="post">
订单号:<input type="" name="out_trade_no" value="<?php echo getNonceStr(); ?>">
支付金额为:<input type="text" name="total_fee"><br/>
<input type="submit" value="付款">
</form>
</body>
</html>

pay.php(生成数据向接口请求)

 <?php
//必填参数
$appid="wx8fd788902902f0**";
$mch_id="14894801**";
$nonce_str=getNonceStr();
$body="cmftest";
$out_trade_no=$_POST['out_trade_no'];
$total_fee=$_POST['total_fee'];
// 注意:spbill_create_ip的值必须是ip。不然生成的签名是错误的
// $spbill_create_ip=$_SERVER['REMOTE_ADDR'];
$spbill_create_ip="127.0.0.1";
$notify_url="http://127.0.0.1/wx_pay/res.php";
$trade_type="NATIVE";
$KEY = 'MIIEvAIBADANBgkqhkiG9w0BAQEF****';
$device_info="WEB";
// 将这些值设置为数组形式
$value=array(
'appid' => $appid,
'mch_id' =>$mch_id,
'nonce_str'=>$nonce_str,
'out_trade_no'=>$out_trade_no,
'total_fee'=>$total_fee,
'spbill_create_ip'=>$spbill_create_ip,
'notify_url'=>$notify_url,
'device_info'=>$device_info,
'body'=>$body,
'trade_type'=>$trade_type
);
//生成签名
$sign=MakeSign($value,$KEY);
// 往数组中增加签名字段
$value["sign"]=$sign;
// 将数组内的数据转为xml格式
$res= ToXml($value);
echo $res;
//接口请求地址
$url="https://api.mch.weixin.qq.com/pay/unifiedorder";
//向接口请求
$result = wx_post($url,$res);
var_dump($result);
$erweima= $result->code_url;
echo $erweima;
// 从结果xml中取出二维码的另外一种方式
// // 截取这个字符串第一次出现的位置(下标)
// $indexnum= strpos($result,"<code_url><![CDATA[");
// // 计算这个字符串的长度
// $strsumnum= strlen("<code_url><![CDATA[");
// $str=substr($result,$indexnum+$strsumnum);
// $a=strpos($str,"]");
// $a=substr($str,0,$a);
// echo $a;
// 使用curl库的post方法向接口发送请求
function wx_post($url,$data){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
return curl_error($ch);
}
// 转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然后输出对象的键和元素
$tmpInfo=simplexml_load_string($tmpInfo);
return $tmpInfo;
}
//随机字符串
function getNonceStr($length = 30)
{
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
$str ="";
for ( $i = 0; $i < $length; $i++ ) {
$str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);
}
return $str;
}
//生成签名
function MakeSign($sign,$KEY)
{
//签名步骤一:按字典序排序参数
ksort($sign);
// var_dump($sign);
$string =ToUrlParams($sign);
// echo "<br/>$string<br/>";
//签名步骤二:在string后加入KEY
$string = $string . "&key=".$KEY;
// echo "$string";
//签名步骤三:MD5加密
$string = md5($string);
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
return $result;
}
// 拼接key和value值
function ToUrlParams($sign)
{
$buff = "";
foreach ($sign as $k => $v)
{
if($k != "sign" && $v != "" && !is_array($v)){
$buff .= $k . "=" . $v . "&";
}
} $buff = trim($buff, "&");
return $buff;
}
//将数组内的数据全部转为xml
function ToXml($sign)
{
$xml="<xml>";
// $xml = "&lt;xml&gt;";
foreach ($sign as $key=>$val)
{
if (is_numeric($val)){
// $xml.="&lt;".$key."&gt;".$val."&lt;/".$key."&gt;";
$xml.="<".$key.">".$val."</".$key.">"; }else{
// $xml.="&lt;".$key."&gt;&lt;![CDATA[".$val."]]&gt;&lt;/".$key."&gt;";
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
}
$xml.="</xml>";
// $xml.="&lt;/xml&gt;";
return $xml;
}
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
您的订单号为<?php echo $out_trade_no; ?>,您支付的金额为<?php echo $total_fee; ?>
<form action="pay_to.php" method="post">
<input type="hidden" name="two_code" value="<?php echo $erweima;?>">
<input type="submit" value="付款支付" >
</form> </body>
</html>

pay_to.php(生成二维码)

 <?php
$value=$_POST["two_code"];
include 'D:\wamp64\www\wx_pay\phpqrcode\phpqrcode.php';
QRcode::png("$value");
?>

界面显示:

【二十九】php之简易微信二维码支付的更多相关文章

  1. java 面向对象(二十九):异常(二)异常的处理

    1.java异常处理的抓抛模型过程一:"抛":程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象. * 并将此对象抛出. * 一旦抛出对象以后,其后的代 ...

  2. 机器学习实战基础(二十九):决策树(二)DecisionTreeClassifier与红酒数据集

    DecisionTreeClassifier与红酒数据集 1 sklearn.tree.DecisionTreeClassifier class sklearn.tree.DecisionTreeCla ...

  3. 微信小程序把玩(二十九)video组件

    原文:微信小程序把玩(二十九)video组件 视频播放组件与图片加载组件也没啥差别,使用起来也没啥注意的 重要属性: wxml <!--监听button点击事件--> <button ...

  4. 剑指Offer(二十九):最小的K个数

    剑指Offer(二十九):最小的K个数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baid ...

  5. Bootstrap <基础二十九>面板(Panels)

    Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...

  6. Web 开发人员和设计师必读文章推荐【系列二十九】

    <Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  7. WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]

    原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...

  8. VMwarevSphere 服务器虚拟化之二十九 桌面虚拟化之安装View副本服务器

    VMwarevSphere 服务器虚拟化之二十九  桌面虚拟化之安装View副本服务器 VMware View中高可用性可是一个必须要考虑的问题.在整个虚拟桌面环境中View Connection S ...

  9. Bootstrap入门(二十九)JS插件6:弹出框

    Bootstrap入门(二十九)JS插件6:弹出框 加入小覆盖的内容,像在iPad上,用于存放非主要信息 弹出框是依赖于工具提示插件的,那它也和工具提示是一样的,是需要初始化才能够使用的 首先我们引入 ...

随机推荐

  1. Maven配置阿里云镜像仓库

    配置文件:D:\MyDev\Maven\apache-maven-3.0.5\conf\settings.xml <mirrors> <mirror> <id>al ...

  2. 对gulp的理解和使用(一)

    说的gulp,到底是什么?用来做什么的? 以前并没有想过这个问题,拿到公司的项目脚手架就开始做事情了.现在专门来总结一下. gulp干什么的呢? gulp是node中的一种代码构建工具,还有就是项目自 ...

  3. django后台管理-ModelAdmin对象

    Django最强大的部分之一是自动生成的管理后台界面. 它从你的模型中读取元数据,以提供一个快速的.以模型为中心的界面,信任的用户可以在这里管理你网站上的内容. 建议管理后台仅作为组织的一个内部管理工 ...

  4. CE教程

    https://www.52pojie.cn/thread-726510-1-1.htmlhttps://www.52pojie.cn/thread-726154-1-1.html https://w ...

  5. 获取其他线程的数据用 queue, 多进程Q

    获取其他线程的数据用 queue, 多进程Q

  6. Django XSS攻击

    Django XSS攻击 XSS(cross-site scripting跨域脚本攻击)攻击是最常见的web攻击,其特点是“跨域”和“客户端执行”,XSS攻击分为三种: Reflected XSS(基 ...

  7. U盘中病毒,文件消失或不显示

    最近非常流行的一个病毒,将电脑或者U盘里的文件全部用快捷方式替换,真实文件被隐藏起来,下面我们就具体了解下此种病毒吧,做好预防与杀毒工作. 一.病毒名称 病毒名称:移动盘同名文件夹病毒;文件夹EXE病 ...

  8. 20145221高其_MSF基础应用

    20145221高其_MSF基础应用 目录 概述 MS08-067漏洞攻击 MS11-050漏洞攻击 MS10-087漏洞攻击 辅助模块 概述 MSF的六种模块 Exploit模块 是利用发现的安全漏 ...

  9. 20145325张梓靖 《网络对抗技术》 PC平台逆向破解

    20145325张梓靖 <网络对抗技术> PC平台逆向破解 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并 ...

  10. python --- 21 MRO C3算法

    一.python2.2之前用的是   经典类的MRO继承 ①深度递归继承     从左到右 ,一条路走到黑 ②广度继承           一层一层的继承 深度继承时   为   R 1 2 3 4 ...