本文主要介绍了基于ThinkPHP框架的微信支付界面的开发,并结合完整的实例详细分析了基于thinkPHP框架的微信支付界面的操作步骤、实现技巧及相关注意事项。有需要的可以参考一下。
本文描述了用ThinkPHP框架实现的微信支付接口的开发。分享给你,供你参考,如下:
微信支付接口开发很简单。我们只需要正式申请许可,然后参考官方文章,就可以实现付费开发。下面我们来看一个简单的例子。
最近有个微商城做了微信支付的界面。现在,整理一下,发上来。
首先你需要一个开通了微信支付接口的微信官方账号。相信大家都知道,开通后,微信会发邮件到你的邮箱。邮件内容是一些开发需要的界面信息(包括账号密码之类的)。
开发步骤
一、进入公众号平台,先设置几个参数,包括绑定域名、设置回调地址等等。
1.在设置-微信官方账号设置-功能设置-设置JS接口安全域名。
2.在微信支付-开发配置-配置你的js支付接口,回调地址等。官方目录和测试目录都可以写。测试目录需要将个人微信号加入白名单才可以使用(提醒:使用TP框架的朋友可以这样填写支付授权目录:域名/索引. php/控制器/,可以通过测试,可以被微信检测到。之前在网上看到有人说这样不行。可能现在升级了吧。呵呵,还有一点就是域名肯定是准备好了的。如果是本地测试,朋友可以用花生壳。我不是打广告,但是我觉得挺好用的。)
3.把ldquo放在开发者中心;授权网页获取用户的基本信息rdquo在域名上写自己的域名,登录微信时需要;
二、到上面一大步设置完成后就可以开始我们的开发工作了;
1.用tp的朋友可以用下面的包放在TP的扩展里,也可以自己从官网下载sdk包。具体目录:ThinkPHP\Library\Vendor\,其他可以忽略。
2.只需打开包里的WxPayPubConfig.php文件,填写你微信支付的界面信息;
三、上面二大步都是配置,这一步就是写支付类了,其实也没什么的,复制粘贴就好了;
1.创建新的Wxpay控制器。当然也可以自己取名字。权限的名称应该与您在微信上配置的授权目录相同。点击此处下载Wxpay。
2.代码就不多说了。下面直接加载代码;
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
命名空间Home \ Controller
使用思考\控制器;
//微信支付类
WxpayController类扩展控制器{
//获取access_token进程中的跳转uri,通过跳转将代码传入jsapi支付页面
公共函数js_api_call() {
$order_sn=I('get.order_sn ',' ');
if (empty($order_sn)) {
标题('位置:'。__ROOT__。'/');
}
供应商('微信支付。WxPayPubHelper’);
//使用jsapi接口
$ jsApi=new \ jsApi _ pub();
//======第一步:获取用户OpenID的网页授权=========
//通过代码获取openid
如果(!isset($ _ GET[' code ']){
//触发微信返回代码code
$ url=$ jsapi-createoauthurlcode('域名/Wxpay/js_api_call?order_sn='。$ order _ sn);
//$ URL=$ jsApi-createOauthUrlForCode(\ WxPayConf _ pub:JS _ API _ CALL _ URL);
标头(' Location:$ URL ');
}否则{
//获取代码code来获取openid
$ code=$ _ GET[' code '];
$ jsApi-set code($ code);
$ OpenID=$ jsApi-get OpenID();
}
$res=数组(
order_sn'='20150109113322 ',
order_amount'=255
);
//======第二步:使用统一支付接口,获取Prepay _ ID=========
//使用统一支付接口
$ unified order=new \ unified order _ pub();
//设置统一支付接口参数。
//设置所需的参数
//appid已经填好了,商家不用再填了。
//mch_id已经填写,商家不需要重复填写。
//non castr已经填写过了,商家不需要重新填写。
//spbill_create_ip已经填写过了,商家不需要重新填写。
//sign已经填好了,商家不用再填了。
$ total _ fee=$ RES[' order _ amount ']* 100;
//$ total _ fee=1;
$body='订单付款{ $ RES[' order _ sn ']} ';
$ unified order-set参数(' OpenID ',' $ OpenID ');//用户标识
$统一顺序集参数(' body ',$ body);//商品描述
//自定义订单号,此处仅作举例
$ out _ trade _ no=$ RES[' order _ sn '];
$ unified order-set参数(' out _ trade _ no ',$ out _ trade _ no);//商户订单号
$统一订单集参数(' total _ fee ',$ total _ fee);//总金额
//$统一订单集参数(' attach ',' order _ sn={ $ RES[' order _ sn ']} ');//附加数据
$ unified order-set参数(' NOTIFY _ URL ',\ WxPayConf _ pub:NOTIFY _ URL);//通知地址
$统一订单集参数(' trade _ type ',' JSAPI ');//交易类型
//非必填参数,商户可根据实际情况选填
//$统一订单集参数(' sub _ mch _ id ',' XXXX ');//子商户号
//$统一顺序集参数('设备信息',' XXXX ');//设备号
//$统一顺序集参数(' attach ',' XXXX ');//附加数据
//$统一顺序集参数(' time _ start ',' XXXX ');//交易起始时间
//$统一顺序集参数(' time _ expire ',' XXXX ');//交易结束时间
//$统一订单集参数(' goods _ tag ',' XXXX ');//商品标记
//$统一顺序集参数(' OpenID ',' XXXX ');//用户标识
//$unifiedOrder-setParameter('产品标识,‘XXXX’);//商品身份证明
$ prepay _ id=$统一订单-获取预付id();
//=========步骤3:使用jsapi调起支付============
$ jsApi-setprepureid($ prepay _ id);
$ jsApi parameters=$ jsApi-get parameters();
$ wx conf=JSON _ decode($ jsapi参数,true);
if($ wx conf[' package ']=' prepay _ id='){
$this-error('当前订单存在异常,不能使用支付');
}
$this-assign('res ',$ RES);
$this-assign('jsApiParameters ',$ jsapi参数);
$ this-display(' jsapi ');
}
//异步通知url,商户根据实际开发过程设定
公共函数notify_url() {
供应商('微信支付WxPayPubHelper’);
//使用通用通知接口
$ Notify=new \ Notify _ pub();
//存储微信的回调
$ XML=$ GLOBALS[' HTTP _ RAW _ POST _ DATA '];
$ notify-saveData($ XML);
//验证签名,并回应微信。
//对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,
//微信会通过一定的策略(如30分钟共8次)定期重新发起通知,
//尽可能提高通知的成功率,但微信不保证通知最终能成功。
if($ notify-checkSign()==FALSE){
$ notify-setReturnParameter(' return _ code ',' FAIL ');//返回状态码
$ notify-setReturnParameter(' return _ msg ','签名失败');//返回信息
}否则{
$ notify-setReturnParameter(' return _ code ',' SUCCESS ');//设置返回码
}
$ return XML=$ notify-return XML();
//==商户根据实际情况设置相应的处理流程,此处仅作举例=======
//以原木文件形式记录回调信息
//$ log _ name=' notify _ URL。日志';//日志文件路径
//$this-log_result($log_name,'【接收到的通知通知】: \ n ' .$xml .\ n’);
$ parameter=$ notify-xmlto数组($ XML);
//$this-log_result($log_name,'【接收到的通知通知】: \ n ' .$parameter .\ n’);
if($notify-checkSign()==TRUE){
if($ notify-data[' return _ code ']==' FAIL '){
//此处应该更新一下订单状态,商户自行增删操作
//$this-log_result($log_name,'【通信出错】: \ n ' .$xml .\ n’);
//更新订单数据【通信出错】设为无效订单
回声”错误";
}
else if($ notify-data[' result _ code ']=' FAIL '){
//此处应该更新一下订单状态,商户自行增删操作
//$this-log_result($log_name,'【业务出错】: \ n ' .$xml .\ n’);
//更新订单数据【通信出错】设为无效订单
回声”错误";
}
否则{
//$this-log_result($log_name,'【支付成功】: \ n ' .$xml .\ n’);
//我这里用到一个过程方法,成功返回数据后处理,返回地数据具体可以参考微信的文档
if ($this-process($parameter)) {
//处理成功后输出成功,微信就不会再下发请求了
回声‘成功’;
}否则{
//如果没有处理成功,微信会每隔一段时间发送请求。
echo“错误”;
}
}
}
}
//订单处理
私有函数进程($parameter) {
//这里要更新订单状态,商家可以自行增删。
/*
*至少返回以下数据
* $parameter=array(
' Out_trade_no'=xxx,//商户订单号
' Total_fee'=XXXX,//支付金额
OpenID'=XXxxx,//支付的用户ID
);
*/
返回true
}
}
?
四、以上就是微信支付的整个流程了,扫码支付的应该都差不多,我没去弄了,用过的朋友也可以分享下,^_^;来上几张支付的截图
更多对PHP相关内容感兴趣的读者,请参考我们的专题:《PHP微信开发技巧汇总》、《php curl用法总结》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》和《PHP中json格式数据操作技巧汇总》。
希望这篇文章对大家的PHP编程有所帮助。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。