参考二维码支付接口文档: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. AtCoder Regular Contest 077 C - pushpush

    题目链接:http://arc077.contest.atcoder.jp/tasks/arc077_a Time limit : 2sec / Memory limit : 256MB Score ...

  2. Autel Maxisys MS908CV Description

    The new Autel MaxiSys CV Heavy Duty Diagnostic is built on the powerful MaxiSys 908 platform and pro ...

  3. (2018干货系列四)最新Python学习路线整合

    怎么学Python Python是一种面向对象的解释型计算机程序设计语言,纯粹的自由软件,常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起. Python初级开 ...

  4. Django框架----命名空间模式

    命名空间模式 即使不同的APP使用相同的URL名称,URL的命名空间模式也可以让你唯一反转命名的URL. 举个例子: project中的urls.py from django.conf.urls im ...

  5. docker 常用操作

    1,安装 .检查内核版本,必须是3.10及以上 uname ‐r .安装docker yum install docker .输入y确认安装 .启动docker [root@localhost ~]# ...

  6. HTML的简介

    1.HTML语言是做显示用的.HTML文件由浏览器来转译执行.(全站工程师:全都会.) 2.静态网页由HTML(显示).CSS(修饰).JAVAScript(简单交互)三种元素构成.3.动态网页:数据 ...

  7. intelliJ IDEA之使用svn或git管理代码

    intelliJ IDEA之使用svn管理代码 1.VCS—>import into Version Control—>Share Project(Subversion) 2.点击+    ...

  8. IOS 苹果手机fiddler抓包时出现了tunnel to 443 解决方案,亲测有效

    先上一张捉取成功图[版本需4.0以上,并非所有https数据可抓取,具体原因未知] 1.先对Fiddler进行设置[打开Fiddler ——> Options .然后打开的对话框中,选择HTTP ...

  9. C# ms speech文字转语音例子

    最近突发奇想 想玩玩  文字转语音的东东   谷歌了一下 发现微软有一个TTS 的SDK   查了查相关资料  发现 还真不错  然后就开始玩玩Microsoft Speech SDK的 DEMO了 ...

  10. 【题解】Luogu P4344 [SHOI2015]脑洞治疗仪

    原题传送门:P4344 [SHOI2015]脑洞治疗仪 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 珂朵莉树好题啊 我一开始一直Re65 后来重构代码就ac了,或许是rp问题 ...