本文描述了基于ThinkPHP框架的微信支付界面的开发。分享给大家参考,如下:
微信支付界面的开发非常简单。我们只需要在官方申请许可,然后参考官方文章即可实现支付开发。让我们举一个简单的例子如下。
最近一家微商城做了一个微信支付的界面。现在,整理好并发送出去。
首先你需要有一个带有微信支付接口的微信官方账号。相信大家都知道微信打开后会给你的邮箱发一封邮件,邮件内容是一些开发需要的界面信息(包括账号密码等)。
开发步骤
首先进入微信官方账号平台,先设置几个参数,包括绑定域名、设置回拨地址等等。
1.在【设置】-【微信官方账号设置】-【功能设置】中设置JS接口安全域名
2.在微信支付-开发配置-配置你的js支付接口、回拨地址等。官方目录和测试目录都可以写,测试目录需要在白名单中添加个人微信号才可以使用(提醒:使用TP框架的朋友在填写支付授权目录时,可以填写以下内容:域名/index.php/controller/,可以通过测试,可以通过微信检测。我看到网上有人说这样不行。现在可能升级了。呵呵,还有一个就是域名肯定已经准备好了。如果在本地测试的朋友能用花生壳,我不是做广告。个人觉得还是很好用的。)
3.在开发者中心写上“网页授权获取用户基本信息”的域名,微信登录时需要用到;
第二,我们可以在上述大步骤完成后开始我们的开发工作;
1.使用tp的朋友可以使用下面的包放在TP的扩展中,也可以自己在官网下载sdk包。具体目录是ThinkPHPLibraryVendor,其他可以忽略;
2.打开包里的WxPayPubConfig.php文件,填写你微信支付的界面信息;
第三,以上两大步骤都是配置。这一步是编写支付类。其实也没什么,只是复制粘贴一下;
1.创建新的Wxpay控制器。当然,你也可以自己命名。访问名称应与您在微信上配置的授权目录相同;点击此处下载Wxpay
2、代码的地方不多说了,代码是直接放在下面的;
?phpnamespace主页控制器;使用思考控制器;//微信支付类类WxpayController扩展了控制器{ //获取访问令牌过程中的跳转uri,通过跳转将密码传入支付插件支付页面公共函数js _ API _ call(){ $ order _ sn=I(' get。order _ sn ',' ');如果(空($ order _ sn)){标题('位置: ' .__ROOT__ .'/');}供应商('威辛佩.wxpaypubbhelper’);//使用支付插件接口$ JSAPi=new JSAPi _ pub();//=========步骤1:网页授权获取用户OpenID=====================//通过密码获得openid if(!isset($ _ GET[' code ']){//触发微信返回密码码$ URL=$ JSAPi-createoauturforcode('域名/Wxpay/js_api_call?order_sn=' .$ order _ sn);//$ URL=$ jsApi-createoauthurforcode( WxPayConf _ pub 3360: js _ API _ CALL _ URL);标头(“位置: $ URL”);}else{ //获取密码码,以获取open id $ code=$ _ GET[' code '];$ JSAPi-SetCode($ code);$ OpenID=$ JSAPI-GetOpenID();} $ RES=array(' order _ sn '=' 20150109113322 ',' order _ amount '=255);//=========步骤2:使用统一支付接口,获取预付费_ id======================//使用统一支付接口$ unified order=new unified order _ pub();//设置统一支付接口参数//设置必填参数//appid已填,商户无需重复填写//mch_id已填,商户无需重复填写//非estr已填,商户无需重复填写//spbill_create_ip已填,商户无需重复填写//符号已填,商户无需重复填写$ total _ fee=$ RES[' order _ amount ']* 100;//$ total _ fee=1;$body='订单支付{ $ RES[' order _ sn ']} ';$ UnifiedOrder-SetParameter(' open id ',' $ open id ');//用户标识$统一订单集参数(' body ',$ body);//商品描述//自定义订单号,此处仅作举例$ out _ trade _ no=$ RES[' order _ sn '];$统一订单集参数(' out _ trade _ no ',$ out _ trade _ no);//商户订单号$统一订单集参数(' total _ fee ',$ total _ fee);//总金额//$统一订单集参数(' attach ',' order _ sn={ $ RES[' order _ sn ']} ');//附加数据$统一订单集参数(' notify _ URL ', WxPayConf _ pub :3360 notify _ URL);//通知地址$ UnifiedOrder-SetParameter(' trade _ type ',' JSAPI ');//交易类型//非必填参数,商户可根据实际情况选填//$统一订单集参数(' sub _ mch _ id ',' XXXX ');//子商户号//$统一订单集参数(' device _ info ',' XXXX ');//设备号//$统一订单集参数(' attach ',' XXXX ');//附加数据//$统一订单集参数(' time _ start ',' XXXX ');//交易起始时间//$统一订单集参数(' time _ expire ',' XXXX ');//交易结束时间//$统一订单集参数(' goods _ tag ',' XXXX ');//商品标记//$统一订单集参数(' OpenID ',' XXXX ');//用户标识//$统一订单集参数(' product _ id ',' XXXX ');//商品ID $ prevable _ ID=$统一订单-getprevable ID();//=========步骤3:使用支付插件调起支付============$ JSAPi-设置返回id($预付费_ id);$ JSapiParameters=$ JSapi-GetParameters();$ wxconf=JSON _ decode($ JSapiParameters,true);if ($wxconf['package']=='预付费_id=') { $this-error('当前订单存在异常,不能使用支付');} $this-assign('res ',$ RES);$this-assign('jsApiParameters ',$ JSapiParameters);$ this-display(' jsapi ');} //异步通知url,商户根据实际开发过程设定公共函数notify _ URL(){供应商(' Weinpay .wxpaypubbhelper’);//使用通用通知接口$ Notify=new Notify _ pub();//存储微信的回调$ XML=$ GLOBALS[' HTTP _ RAW _ POST _ DATA '];$ notify-save data($ XML);//验证签名,并回应微信。 //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败, //微信会通过一定的策略(如30分钟共8次)定期重新发起通知, //尽可能提高通知的成功率,但微信不保证通知最终能成功。
if($ notify-checkSign()==FALSE){ $ notify-setReturnParameter(' return _ code ',' FAIL ');//返回状态代码$ notify-set Return parameter(' Return _ msg ','签名失败');//返回信息} else { $ notify-set return parameter(' return _ code ',' success ');//设置返回代码} $ return XML=$ notify-return XML();//==商家根据实际情况设置相应的处理流程。这里只是一个例子======//以日志文件的形式记录回调信息//$ log _ name=' notify _ URL . log ';//日志文件路径//$this-log_result($log_name,'[通知已收到] :n '。$xml。 n ');$ parameter=$ notify-XMltoarray($ XML);//$this-log_result($log_name,'[notify received] :n '。$参数。 n ');if($ notify-check sign()==true){ if($ notify-data[' return _ code ']=' fail '){//此处订单状态应更新,商家可自行添加或删除//$this-log_result($log_name,'[通讯错误])//将订单数据[通讯错误]更新为无效订单echo ' error}否则if($ notify-data[' result _ code ']==' fail '){//在这里,订单状态要更新,商家可以自行添加或删除//$this-log_result($log_name,'[business error] : n '。$ xml。)//将订单数据[通信错误]更新为无效订单回应“错误”;} else {//$ this-log _ result($ log _ name,'[成功付款] :n '。$xml。 n ');//我这里使用的是process方法,成功返回数据进行后处理。返回的数据请参考微信文档if($ this-process($ parameter)){//处理成功后,输出成功,微信不会发送回显‘成功’的请求;}else {//未成功处理,微信会间隔发送回显‘错误’的请求;} } } }//订单处理私有函数process($ parameter){//这里需要更新订单状态,商家可以自行增删。/* *返回的数据至少是以下* $参数=数组(' out _ trade _ no'=XXX,//商户订单号' total_fee'=XXXX,//支付金额' openID'=XXxxx,//支付用户id);*/返回true}}?第四,以上是微信支付的全过程。扫码支付应该类似。我没明白。用过的朋友也可以分享一下。_;来拍几张付款截图吧
更多对PHP相关内容感兴趣的读者可以查看本网站专题:《PHP微信开发技巧汇总》、《php curl用法总结》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《PHP中json格式数据操作技巧汇总》、《PHP针对XML文件操作技巧总结》、0103010
希望本文对PHP编程有所帮助。