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

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

本文主要介绍了基于ThinkPHP框架的微信支付界面的开发,并结合完整的实例详细分析了基于thinkPHP框架的微信支付界面的操作步骤、实现技巧及相关注意事项。有需要的可以参考一下。

本文描述了用ThinkPHP框架实现的微信支付接口的开发。分享给你,供你参考,如下:

微信支付接口开发很简单。我们只需要正式申请许可,然后参考官方文章,就可以实现付费开发。下面我们来看一个简单的例子。

最近有个微商城做了微信支付的界面。现在,整理一下,发上来。

首先你需要一个开通了微信支付接口的微信官方账号。相信大家都知道,开通后,微信会发邮件到你的邮箱。邮件内容是一些开发需要的界面信息(包括账号密码之类的)。

开发步骤

一、进入公众号平台,先设置几个参数,包括绑定域名、设置回调地址等等。

1.在设置-微信官方账号设置-功能设置-设置JS接口安全域名。

2.在微信支付-开发配置-配置你的js支付接口,回调地址等。官方目录和测试目录都可以写。测试目录需要将个人微信号加入白名单才可以使用(提醒:使用TP框架的朋友可以这样填写支付授权目录:域名/索引. php/控制器/,可以通过测试,可以被微信检测到。之前在网上看到有人说这样不行。可能现在升级了吧。呵呵,还有一点就是域名肯定是准备好了的。如果是本地测试,朋友可以用花生壳。我不是打广告,但是我觉得挺好用的。)

3.把ldquo放在开发者中心;授权网页获取用户的基本信息rdquo在域名上写自己的域名,登录微信时需要;

二、到上面一大步设置完成后就可以开始我们的开发工作了;

1.用tp的朋友可以用下面的包放在TP的扩展里,也可以自己从官网下载sdk包。具体目录:ThinkPHPLibraryVendor,其他可以忽略。

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编程有所帮助。

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