,,ThinkPHP框架实现的微信支付接口开发完整示例

,,ThinkPHP框架实现的微信支付接口开发完整示例

本文主要介绍了基于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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: