您的位置:首页 > 移动开发 > 微信开发

PHP开发微信支付功能

2018-01-19 16:48 253 查看
因工作需要,公司有一个项目要使用到微信扫码付款功能

01.登录微信公众号,下载DEMO程序
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1



02.打开demo的



03.修改配置文件



每一个公众号后台有这四个相关配置参数



04.修改扫码支付连接



05.打开扫码连接,会发现写某讯API部门的这群杂毛写的代码有问题的,需要修改....



打开这个API程序
F:\wamp\www\www.wxpay.cn\lib\WxPay.Api.php (自己项目下的)
找到538行代码来修改一下

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//严格校验



刷新刚刚的连接....



到这里就基本完成,我们在开发 支付成功之后,回调,并提示用户付款成功

native.php代码

<?php
ini_set('date.timezone','Asia/Shanghai');
//error_reporting(E_ERROR);

require_once "../lib/WxPay.Api.php";
require_once "WxPay.NativePay.php";

//模式一
/**
* 流程:
* 1、组装包含支付信息的url,生成二维码
* 2、用户扫描二维码,进行支付
* 3、确定支付之后,微信服务器会回调预先配置的回调地址,在【微信开放平台-微信支付-支付配置】中进行配置
* 4、在接到回调通知之后,用户进行统一下单支付,并返回支付信息以完成支付(见:native_notify.php)
* 5、支付完成之后,微信服务器会通知支付成功
* 6、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php)
*/
$notify = new NativePay();
$url1 = $notify->GetPrePayUrl("123456789");

//模式二
/**
* 流程:
* 1、调用统一下单,取得code_url,生成二维码
* 2、用户扫描二维码,进行支付
* 3、支付完成之后,微信服务器会通知支付成功
* 4、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php)
*/
$input = new WxPayUnifiedOrder();
$input->SetBody("测试购买标题");
$input->SetAttach("测试提示数据");

//生成一个数据,存储在二维码当中,当我们去查询订单状态,就用 $num这个变量即可
$num=WxPayConfig::MCHID.date("YmdHis");
$input->SetOut_trade_no($num);

//设置支付1块块钱,微信金额是以分为单位   100分=1块钱
$input->SetTotal_fee("100");

$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
$input->SetTrade_type("NATIVE");
$input->SetProduct_id("123456789");
$result = $notify->GetPayUrl($input);
$url2 = $result["code_url"];
?>

http://www.wxpay.cn:8080/example/native.php 二维码付款php页面写一个js定时器,每隔多少秒 使用微信支付自带的API进行查询订单是否已付款

二维码支付页面代码

<?php
ini_set('date.timezone','Asia/Shanghai');
//error_reporting(E_ERROR);

require_once "../lib/WxPay.Api.php";
require_once "WxPay.NativePay.php";

//模式一
/**
* 流程:
* 1、组装包含支付信息的url,生成二维码
* 2、用户扫描二维码,进行支付
* 3、确定支付之后,微信服务器会回调预先配置的回调地址,在【微信开放平台-微信支付-支付配置】中进行配置
* 4、在接到回调通知之后,用户进行统一下单支付,并返回支付信息以完成支付(见:native_notify.php)
* 5、支付完成之后,微信服务器会通知支付成功
* 6、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php)
*/
$notify = new NativePay();
$url1 = $notify->GetPrePayUrl("123456789");

//模式二
/**
* 流程:
* 1、调用统一下单,取得code_url,生成二维码
* 2、用户扫描二维码,进行支付
* 3、支付完成之后,微信服务器会通知支付成功
* 4、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php)
*/
$input = new WxPayUnifiedOrder();
$input->SetBody("测试购买标题");
$input->SetAttach("测试提示数据");

//生成一个数据,存储在二维码当中,当我们去查询订单状态,就用 $num这个变量即可
$num=WxPayConfig::MCHID.date("YmdHis");
$input->SetOut_trade_no($num);

//设置支付1块块钱,微信金额是以分为单位
$input->SetTotal_fee("1");

$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
$input->SetTrade_type("NATIVE");
$input->SetProduct_id("123456789");
$result = $notify->GetPayUrl($input);
$url2 = $result["code_url"];
?>

<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>
<!-- 引入jquery -->
<script type="text/javascript" src="/jquery-1.7.2.min.js"></script>
</head>
<body>

<div style="width: 250px; margin: 0 auto; margin-top: 200px;">
<div style="margin-left: 10px;color:#556B2F;font-size:30px;font-weight: bolder;">扫描支付模式二</div><br/>
<img alt="模式二扫码支付" src="http://paysdk.weixin.qq.com/example/qrcode.php?data=<?php echo urlencode($url2);?>" style="width:150px;height:150px;"/>
</div>
<script type="text/javascript">
//定时器
var timer=null;
//查询当前是否已支付  通过 $num这个变量进行查询
function getStatus()
{
var num="<?php echo $num;?>";// 查询二维码是否支付的凭证 在上面PHP生成的
$.ajax({
"url":"orderquery.php",
"type":"post",
"dataType":"text",
"data":{"out_trade_no":num},
success:function(data)
{
//如果返回的字符是SUCCESS 说明支付成功  否则就是未支付
if(data == "SUCCESS")
{
//清除定时器
clearInterval(timer);
//跳转到支付成功页面
location.href="success.php";
}
}
});
}
//当DOM节点加完毕,执行以下代码
$(function(){
timer = setInterval(function(){getStatus()},2000);
});

</script>
</body>
</html>

查询订单是否支付页面 orderquery.php

<?php

//引入微信支付配置文件
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 "<font color='#f00;'>$key</font> : $value <br/>";
}
}

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);
echo $result['trade_state'];
exit();
}

exit();
?>

支付成功跳转的页面 在这上面可以写一些代码逻辑 修改订单为支付状态,提醒类似的..
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
<html xmlns="http://www.w3.org/1999/xhtml">;
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>微信支付成功</title>
</head>

<body>
<br /><br /><br /><br /><br /><br /><br />
<h1>微信支付成功</h1>
</body>
</html>

OK 微信支付基本开发完成 我的QQ 771541213
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微信扫码 支付