如何用PHP实现微信支付,求教 。新手!说明详细点以PHP语言为例,对微信支付的开发流程进行一下说明:
1.获取订单信息 。
2.根据订单信息和支付相关的账号生成sign,并且生成支付参数 。
3.将支付参数信息POST到微信服务器,获取返回信息 。
4.根据返回信息生成相应的支付代码(微信内部)或是支付二维码(非微信内) , 完成支付 。
php微信支付怎么获取回调数据微信公众号JSAPI支付 一:配置参数 申请成功后,获取接口文件, 将所有文件放入项目根目录weixin下,在WxPay.ub.config.php中填入配置账户信息; 二:设置授权 开发者中心-网页服务-网页授权获取用户基本信息-修改;
php网页开发微信分享成功后的回调函数怎么写1、签名:
url: 需要根据不同的页面动态获取php获取微信回调数据,url不能进行encodeURIComponent,否则验签会失败 url不能包括微信添加的#后边的部分,所以应该处理为:window.location.href.split('#')[0] 签名用的url必须是调用JS接口页面的完整URL 。
nonceStr、timestamp:应该动态生成,而不能hardcode 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同
为安全考虑,签名必须在后台进行,其php获取微信回调数据他调用js在前台进行 。
2、ticket和accesstoken:
accesstoken:同调用微信其他接口的accesstoken,必须全局缓存,以免影响其他业务,即是说:微信所有业务应该用同一个accesstoken去调用微信接口 , 而不能自己刷新accesstoken 。
ticket:同accesstoken一样,必须全局缓存,方式很多,可以放到数据库,或者放到缓存 。目前ticket的有效时间为2小时,所以2小时内ticket未过期时 , 不能重复获取,否则可能导致ticket获取次数超过限额,导致sign失败 。
3、注意代码执行顺序
首先应该获取签名,签名获取后在调用wx.config方法 , 然后再执行wx.ready、wx.error方法 。
4、其他
每个页面加载完成后都应该重新从后台获取签名信息,避免签名失败
具体开发步骤详见官方文档
5、官方常见问题及处理方法:
调用config 接口的时候传入参数 debug: true 可以开启debug模式 , 页面会alert出错误信息 。
微信v3扫码支付二返回的notify.php怎么接收回调的值其实在写这篇文章的时候感觉自己已经落伍了 , 不过笔者在百度上搜索"微信支付开发之扫描支付(模式二)后如何回调"寻找答案时,发现依旧有很多朋友没有解决这个问题,所以就把自己的解决思路分享给大家 。
一、下载微信支付SDK(笔者以php发开为例 , sdk包为WxpayAPI_php_v3.zip)下载SDK包后解压,在解压目录下,我们会看到如下目录二、查阅微信支付开发者文档后得知,微信扫码支付的demo即为example目录下的native.php文件为了方便 , 我们要做的是将整个解压后的文件放入到本地环境的根目录下的wxpay(可随个人喜好命名)文件夹中三、以笔者为例,在浏览器中输入打开上面网址后 , 发现有两个二维码 , 如题,我们今天研究的是模式二扫码(官方也推荐模式二扫码支付)四、我们用手机登陆微信,扫描上面页面中的模式二的二维码,并且支付在这里我们发现一个有趣的问题,当你支付成功后,PC页面中并没有发生任何变化,所以我们考虑的主要问题是 , 支付后如何进行回调 。
这里不说多的废话了,笔者参考了网上的诸多方法,总结如下:
1、删掉native.php文件中扫码模式一的一些html,只剩下扫码模式二的一些相关html代码 。
2、由于官方文档中也说明了,扫码模式二的支付结果是异步响应,不会主动返回支付结果,所以我们采用了javascript去时时监听支付结果,然后根据请求的结果,在做下一步的页面回调 。笔者最终代码如下,有兴趣的朋友可以参考下:
native.php文件
复制代码
1 ?php
2 ini_set('date.timezone','Asia/Shanghai');3 //error_reporting(E_ERROR);
4
5 require_once "../lib/WxPay.Api.php";
6 require_once "WxPay.NativePay.php";
7 require_once 'log.php';
8
9 //模式一
10 /**
11* 流程:
12* 1、组装包含支付信息的url,生成二维码13* 2、用户扫描二维码 , 进行支付
14* 3、确定支付之后 , 微信服务器会回调预先配置的回调地址,在【微信开放平台-微信支付-支付配置】中进行配置15* 4、在接到回调通知之后,用户进行统一下单支付,并返回支付信息以完成支付(见:native_notify.php)16* 5、支付完成之后,微信服务器会通知支付成功17* 6、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php)18*/
19 $notify = new NativePay();
20 $url1 = $notify-GetPrePayUrl("123456789");21
22 //模式二
23 /**
24* 流程:
25* 1、调用统一下单 , 取得code_url,生成二维码26* 2、用户扫描二维码,进行支付
27* 3、支付完成之后 , 微信服务器会通知支付成功28* 4、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php)29*/
30 $input = new WxPayUnifiedOrder();
31 $input-SetBody("1分钱购买何宁");
32 $input-SetAttach("1分钱购买何宁");
33 $num=WxPayConfig::MCHID.date("YmdHis");34 $input-SetOut_trade_no($num);
35 $input-SetTotal_fee("1");
36 $input-SetTime_start(date("YmdHis"));37 $input-SetTime_expire(date("YmdHis", time()600));38 $input-SetGoods_tag("test");
39 $input-SetNotify_url("");40 $input-SetTrade_type("NATIVE");
41 $input-SetProduct_id("123456789");
42 $result = $notify-GetPayUrl($input);
43 $url2 = $result["code_url"];
44 ?
45
46 html
47 head
48meta http-equiv="content-type" content="text/html;charset=utf-8"/
49meta name="viewport" content="width=device-width, initial-scale=1" /
50title微信支付样例/title
51 /head
52 body
53div style="margin-left: 10px;color:#556B2F;font-size:30px;font-weight: bolder;"扫描支付模式二/divbr/
54img alt="模式二扫码支付" src="https://www.04ip.com/post/qrcode.php?data=?php echo urlencode($url2);?" style="width:150px;height:150px;"/
55div id="myDiv"/divdiv id="timer"0/div
56script
【php获取微信回调数据 php返回信息】57//设置每隔1000毫秒执行一次load() 方法58var myIntval=setInterval(function(){load()},1000);59function load(){
60document.getElementById("timer").innerHTML=parseInt(document.getElementById("timer").innerHTML) 1;61var xmlhttp;
62if (window.XMLHttpRequest){
63// code for IE7 , Firefox, Chrome, Opera, Safari64xmlhttp=new XMLHttpRequest();65}else{
66// code for IE6, IE5
67xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");68}
69xmlhttp.onreadystatechange=function(){70if (xmlhttp.readyState==4xmlhttp.status==200){71trade_state=xmlhttp.responseText;72if(trade_state=='SUCCESS'){73document.getElementById("myDiv").innerHTML='支付成功';74//alert(transaction_id);75//延迟3000毫秒执行tz() 方法76clearInterval(myIntval);77setTimeout("location.href='https://www.04ip.com/post/success.php'",3000);78
79}else if(trade_state=='REFUND'){80document.getElementById("myDiv").innerHTML='转入退款';81clearInterval(myIntval);82}else if(trade_state=='NOTPAY'){83document.getElementById("myDiv").innerHTML='请扫码支付';84
85}else if(trade_state=='CLOSED'){86document.getElementById("myDiv").innerHTML='已关闭';87clearInterval(myIntval);88}else if(trade_state=='REVOKED'){89document.getElementById("myDiv").innerHTML='已撤销';90clearInterval(myIntval);91}else if(trade_state=='USERPAYING'){92document.getElementById("myDiv").innerHTML='用户支付中';93}else if(trade_state=='PAYERROR'){94document.getElementById("myDiv").innerHTML='支付失败';95clearInterval(myIntval);96}
97
98}
99}
100//orderquery.php 文件返回订单状态,通过订单状态确定支付状态101xmlhttp.open("POST","orderquery.php",false);102//下面这句话必须有
103//把标签/值对添加到要发送的头文件 。
104xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");105xmlhttp.send("out_trade_no=?php echo $num;?");106
107}
108/script
109
110 /body
111 /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();
}
?
新建success.php文件:
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""
html xmlns=""
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
thinkphp微信支付回调是什么意思微信支付回调就是说用户通过微信支付完毕时php获取微信回调数据的返回值去判断支付结果 。
通过返回的结果php获取微信回调数据,去修改数据库(完成php获取微信回调数据你想实现的功能)
例php获取微信回调数据:用户支付成功-通过回调判断-数据库操作(为会员充值积分)
用户支付失败(或取消支付)-通过回调判断-跳转到支付失败页
php获取微信回调数据的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于php返回信息、php获取微信回调数据的信息别忘了在本站进行查找喔 。
推荐阅读
- 镂空马丁鞋直播卖货,淘宝马丁鞋
- 安卓调用html5跳转页面的简单介绍
- 路由器连接宽带怎么样设置,路由器设置宽带连接方式
- 洛阳外贸女装直播带货,洛阳外贸女装直播带货怎么样
- python奇偶函数 python求奇偶代码
- c语言输出100以内所有的质数并求和,c语言输出1到100的素数并求和
- java扩展代码,java扩展函数
- 模拟系列游戏,模拟系列游戏大全
- flutter按下缩小效果好吗,flutter按钮效果