本文主要介绍了基于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编程有所帮助。