先说下其中的坑,微信的接口文档和demo,那真叫一个坑,要么文字指向性错误,那么demo代码没法运行,报的错,甚至没有文档可查
先说明一些问题,街上的一些扫码微信的二维码其实一般都是注册的企业微信号,用的是微信转账,企业微信提现需不需要手续费这个目前不知,
第二种就是你买一些东西,商家就会生成一个二维码给你扫,扫出来就是可以直接支付的,有金额的二维码,这个才是微信扫码支付,模式二
其实就是下一个订单然后支付,模式一的固定二维码支付不知道有人成功过吗?我一直运行不成功,返回一直商家数据结构错误
demo代码下载地址: http://download.csdn.net/detail/zh7314/9593664
http://xxx.com/pay/
请记住一定要授权你的页面的上级目录,多一级都不行,我不知道为什么
首先把 pay_test\lib\WxPay.Config.php
* APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
*
* MCHID:商户号(必须配置,开户邮件中可查看)
*
* KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)
* 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert
*
* APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置),
* 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN
这个你去设置的32的那个
* @var string
*/
const APPID = '';
const MCHID = '';
const KEY = '';
const APPSECRET = '';
![](https://i-blog.csdnimg.cn/blog_migrate/10b38de7240af70a8b0cef5b97eb8603.png)
提交的页面就是 submit.php 接受页面是 getqrcode.php 这个页面就是生产二维码和主动请求订单是否支付成功的
http://xxx.com/pay_test/return.php 这个也是个坑,至今没有接受过任何数据,捕捉了页面接受的所有东西,写入日志就是什么都没有,好奇怪
如果有知道任何接受的兄弟,请联系楼下,发下demo代码看下
submit.php代码
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../../public/css/bootstrap-responsive.css" rel="stylesheet">
<link href="../../public/css/bootstrap.css" rel="stylesheet">
<script type="text/javascript" src="../../public/js/bootstrap.js"></script>
<script type="text/javascript" src="../../public/js/jquery.js"></script>
<style type="text/css">
.form-signin {
max-width: 300px;
padding: 19px 29px 29px;
margin: 0 auto 20px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
-moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
box-shadow: 0 1px 2px rgba(0,0,0,.05);
}
.form-signin .form-signin-heading,
.form-signin .checkbox {
margin-bottom: 10px;
}
.controls input[type="text"]{
font-size: 15px;
height: auto;
}
</style>
<title>融智金融-微信支付还款</title>
</head>
<body>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div class="text-center">
<img alt="140x140" src="../../public/image/logo.png" />
</div>
<h3 class="text-center">
融智金融
</h3>
<div class="alert">
<button type="button" class="close" data-dismiss="alert">×</button>
<h4>
温馨提示!
</h4>
<strong>金额填写:</strong> 100元就写100即可<br>
<strong>备注格式:</strong> 营业厅-操作人员-金额
</div>
<form class="form-signin" action="getqrcode.php" method="post">
<input type="text" class="input-block-level" placeholder="金额" name="money" id="money">
<input type="text" class="input-block-level" placeholder="备注" name="note" id="note">
<button class="btn" type="button" id="form_id">生成二维码</button>
</form>
</div>
</div>
</div>
</body>
</html>
<script>
$(function() {
$('#form_id').click(function(){
if($('#money').val()==''){
alert('金额不能为空');
return;
}
if(isNaN($('#money').val())){
alert("金额必须为数字");
return;
}
if($('#money').val()==0){
alert('金额不能为0元');
return;
}
if($('#money').val()>=0.01){
$('.form-signin').submit();
}
// $('.form-signin').unbind("click");
});
});
</script>
getqrcode.php
<?php
ini_set('date.timezone','Asia/Shanghai');
require_once "../lib/WxPay.Api.php";
require_once "WxPay.NativePay.php";
include '../../admin/db.php';
$money = (float)$_POST['money']*100;
$mon = (float)$_POST['money'];
$note = htmlspecialchars(addslashes($_POST['note']));
$SetBody = '微信支付还款';
$SetAttach = '微信扫码还款';
$SetOut_trade_no = date("YmdHis").rand(1,100);;
$SetGoods_tag ='产品';
//数据库生成数据,根据return.php更改数据,订单是否支付成功
$time = time();
// try{
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql = 'INSERT INTO wx_log (log_id,out_trade_no,prepay_id,money,notify_money,time,note,result_code) VALUES (null,:SetOut_trade_no,0,:money,0,:time,:note,0)';
$stmt = $db->prepare($sql);
$stmt->bindParam(':SetOut_trade_no', $SetOut_trade_no);
$stmt->bindParam(':money',$mon);
$stmt->bindParam(':time',$time);
$stmt->bindParam(':note', $note);
$stmt->execute();
// }catch(PDOException $exception){
// echo 'PDO Exception Caught.';
// echo 'Error with the database:<br />';
// echo 'SQL Query: '.$query;
//
// echo '<pre>';
// echo "Error: ".$exception->getMessage()."<br />";
// echo "Code: ".$exception->getCode()."<br />";
// echo "File: ".$exception->getFile()."<br />";
// echo "Line: ".$exception->getLine()."<br />";
// echo "Trace: ".$exception->getTraceAsString()."<br />";
// echo '</pre>';
// }
//die;
$notify = new NativePay();
$input = new WxPayUnifiedOrder();
$input->SetBody($SetBody);
$input->SetAttach($SetAttach);
$input->SetOut_trade_no($SetOut_trade_no);
$input->SetTotal_fee($money);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag($SetGoods_tag);
$input->SetNotify_url("http://pay.xinyzx.com/pay_test/return.php");
$input->SetTrade_type("NATIVE");
$input->SetProduct_id("1");
$result = $notify->GetPayUrl($input);
$url = $result["code_url"];
//include '../phpqrcode.php';
//QRcode::png($url);
?>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../../public/css/bootstrap-responsive.css" rel="stylesheet">
<link href="../../public/css/bootstrap.css" rel="stylesheet">
<script type="text/javascript" src="../../public/js/bootstrap.js"></script>
<script type="text/javascript" src="../../public/js/jquery.js"></script>
<title>融智金融-微信支付还款</title>
</head>
<body>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div class="text-center">
<img src="http://paysdk.weixin.qq.com/example/qrcode.php?data=<?php echo urlencode($url);?>" style="width:300px;height:300px;margin-top: 20%"/>
<input type="hidden" name="out_trade_no" id="out_trade_no" value="<?php echo $SetOut_trade_no;?>" />
</div>
</div>
</div>
</div>
<script>
$(function(){
setInterval(function(){check()}, 5000); //5秒查询一次支付是否成功
})
function check(){
var url = "notify_orders.php";
var out_trade_no = $("#out_trade_no").val();
var param = {'out_trade_no':out_trade_no};
$.post(url, param, function(data){
data = JSON.parse(data);
if(data['trade_state'] == "SUCCESS"){
// alert(JSON.stringify(data));
alert("订单支付成功");
window.location.href = "submit.php";
}
});
}
</script>
</body>
</html>
notify_orders.php
ini_set('date.timezone','Asia/Shanghai');
error_reporting(E_ERROR);
require_once "../lib/WxPay.Api.php";
//$_POST["out_trade_no"] = '201607291913581075';
//处理客户支付,是否支付成功
if(isset($_POST["out_trade_no"]) && $_POST["out_trade_no"] != ""){
$out_trade_no = $_POST["out_trade_no"];
$input = new WxPayOrderQuery();
$input->SetOut_trade_no($out_trade_no);
// P(WxPayApi::orderQuery($input));
// exit();
echo json_encode(WxPayApi::orderQuery($input));
exit();
}
核心的部分就是这些,还有一个后台对账的其实很简单了,详细的请参看代码