手机版

PHP实现微信应用退款功能

时间:2021-08-29 来源:互联网 编辑:宝哥软件园 浏览:

本文的例子分享了PHP在微信上申请退款的具体代码,供大家参考。具体内容如下

微信微信官方账号开发文档链接地址

我们谈了如何实现微信支付。具体可以参考博文:PHP中实现微信支付(jsapi payment)的过程,ThinkPHP中实现jsapi payment的过程。由于业务需要,我们还是需要一个微信退款,经过研究探索最终解决。

准备工作:

当然是微信支付结算了,不然怎么退呢,这次我们还是用官方的演示。当然网上可能有很多大神自己重写封装演示,可能比较好用简洁,但我还是不提倡用,原因如下:(1)可能不完整,可能他刚实现微信支付,但也有申请退款、查询退款、订单查询、订单取消等业务功能。你以后可能会需要它。如果依靠大神SDK的便利,如果有新的业务需求,就会被逼;(2)安全考虑,涉及到支付涉及到金钱,必须非常安全。虽然我也吐槽官方的SDK,但至少会相对安全,而且会再次重写。虽然暂时没有问题,但有漏洞就不好了。

本文通过使用WxPay.Api.PHP提供的refer()方法来实现,这是官方SDK中最重要的类文件。这个方法在WxPay.Api.php文件的第141行,代码如下:

/* * * * *申请退款。wxpayreback中应至少填写out_trade_no和transaction_id中的一个,并且* out _ refer _ no、total_fee、reback _ fee和op_user_id是必需参数* appid、mchid、spbill_create_ip和nonce_str不需要填写* @ param wxpayreback $ inputtobj * @ param int $ time out * @成功时抛出wxpayexception * @ return,其他抛出异常*/公共静态函数return($ inputbj,$timeOut=6){ $url//检查所需的参数if(!$ InputBoj-IsOut _ trade _ noSet()!$ input tobj-is transaction _ idset()){抛出新的wxpayexception('在退款申请界面,至少填写out_trade_no和transaction _ id之一!');}else if(!$ input BoJ-is out _退款_ noset()){抛出新的wxpayexception('在退款申请界面,需要的参数out _退款_ no!');}else if(!$ input tobj-istotal _ feeset()){抛出新的wxpayexception('退款申请界面中缺少必需的参数total _ fee!');}else if(!$ input BoJ-isre fund _ feeset()){抛出新的wxpayexception('在退款申请界面中,缺少必需的参数return _ fee!');}else if(!$ input BoJ-isop _ user _ idset()){抛出新的wxpayexception('退款申请界面中缺少必需的参数op _ user _ id!');} $ input bj-SetAppid(wxpayconfig : appid);//公共帐户id $ input BoJ-set mch _ id(wxpayconfig :3360 MH id);//商品编号。$ input BoJ-set nonce _ str(self : getnonce str());//随机字符串$ InputBoj-SetSign();//sign $ XML=$ InputBoj-ToxML();$ start timestamp=self :3360get毫秒();//请求开始时间$ response=self : post xmlcurl($ XML,$ URL,true,$ time out);$ result=wxpayresults 33603360 init($ response);self : reportcostime($ URL,$startTimeStamp,$ result);//报告请求返回$result需要时间;}官方方法,哪些参数写的很清楚,一些必要的参数SDK已经为我们完成了。我将重新打包这个方法,以便在项目中轻松调用:

/* * *微信退款* @ param string $ Order _ ID Order ID * @返回成功时返回(数组类型),抛出其他异常*/Function wxurund($ Order _ ID){//My SDK放在项目根目录下的Api目录中。Require _ once app _ root。/API/wx pay/lib/wx pay//根据订单中的数据查询订单并退款$ order=m(' order ')-其中(array ('id'=$ order _ id,' is _ return '=2,' order _ status '=1))-find();$ merchid=wxpayconfig : chid;if(!$order)返回false$ input=new wxpayreback();$ input-Setout _ trade _ no($ order[' order _ sn ']);//自有订单号$ input-set transaction _ id($ order[' transaction _ id ']);//微信生成的订单序列号,在成功支付时正式返回$ input-setout _ return _ no(get rand _ num(true));//拒绝号。$ input-set total _ fee($ order[' total _ price ']);//订单的投标价格,以美元为单位输入-设置退款_费用($订单[' total _ price ']);//退款总额和订单总额,以分钟为单位,只能是整数$ input-SetOp _ user _ id($ merchid);$ result=WxPayApi:refund退款($ input);//退款操作//此句file_put_contents用于查看服务器返回的退款结果。测试后,您可以删除//file _ put _ contents (app _ root . '/API/wxpay/logs/log3.txt ',arraytoxml ($ result),file _ append);返回$ result}这里需要吐槽一下,但我连返回值的类型都没说。当我支付时,我返回XML数据,但是我对返回数组的事实感到措手不及。哈哈,还不如返回一个数组,可以直接判断处理。

方法调用更简单。

//微信退款$ result=wxref und($ order _ id);//此句file_put_contents用于查看服务器返回的退款结果。测试后,可以删除//file _ put _ contents (app _ root。/API/wxpay/logs/log4.txt ',arraytoxml ($ result),file _ append);if($ result[' return _ code ']=' success ')($ result[' result _ code ']==' success '){//退款成功} else if($ result[' return _ code ']==' fail ')|。($ result[' result _ code ']==' fail '){//退款失败//原因$原因=(空($ result ['err _ code _ des'])?$ result[' return _ msg ']: $ result[' err _ code _ des ']);}否则{ //失败}退款成功退回如下:

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:PHP实现微信应用退款功能是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

相关文章推荐