微信退款API的操作方法
首先我们需要申请到商户的key密钥 这个是在
https://pay.weixin.qq.com/index.php/apply/applyment_home/guide_normal#none 微信官方链接
详情请看 https://www.cnblogs.com/wzsoul/p/15538319.html
账号关联(AppID绑定)
https://pay.weixin.qq.com/static/pay_setting/appid_protocol.shtml
应用场景 当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家账号上。 注意: 1、交易时间超过一年的订单无法提交退款 2、微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号 3、请求频率限制:150qps,即每秒钟正常的申请退款请求次数不超过150次 4、每个支付订单的部分退款次数不能超过50次 5、如果同一个用户有多笔退款,建议分不同批次进行退款,避免并发退款导致退款失败 6、申请退款接口的返回仅代表业务的受理情况,具体退款是否成功,需要通过退款查询接口获取结果。 7、一个月之前的订单申请退款频率限制为:5000/min
接口地址
接口链接:https://api.mch.weixin.qq.com/secapi/pay/refund
我们退款的时候需要注意要准备证书使用,在支付的时候不是必要条件
需要证书
点击申请证书,跳出生成API证书界面。点击“允许访问”,同意网页访问剪切板;
三、下载证书工具,在证书工具中点击“申请证书”按钮;
四、按照要求填写商户信息,点击下一步;
五、复制请求串到剪切板,在之前的生成API证书界面粘贴,输入“短信验证码”和“登录密码”;点击下一步,进入复制证书串界面。
六、复制证书串到剪切板,在证书工具的粘贴证书串界面,点击粘贴按钮。然后进入下一步,生成证书。
七、生成证书之后,找到下载到电脑的证书文件,改个好认的名字发给技术人员,记得保留一个备份。
技术人员获得证书之后将证书部署到服务器上。也就完成了微信支付与微信公众号等平台的对接了。
下面是请求时需要的参
由于跟支付的时候调用的一样 我们这里只写核心的转换代码 详情请看博客的支付流程
微信需要的是xml格式的数据所以我们必须转换为对应的格式
$post_data = "<xml> <appid>".$appid."</appid> <body>".$body."</body> <mch_id>".$mch_id."</mch_id> <nonce_str>".$nonce_str."</nonce_str> <notify_url>".$notify_url."</notify_url> <out_trade_no>".$out_trade_no."</out_trade_no> <spbill_create_ip>".$spbill_create_ip."</spbill_create_ip> <total_fee>".$total_fee."</total_fee> <trade_type>".$trade_type."</trade_type> <sign>".$sign."</sign> </xml>";//拼接成XML 格式 // <scene_info>$scene_info</scene_info> // 微信地址 $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'; $dataxml=$this->posturl($url,$post_data); $reruxml = (array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA);
//请求接收回来的数据转换为数组的格式
XML 转数组
//回调信息 public function wxhd(){ //允许从外部加载XML实体(防止XML注入攻击) libxml_disable_entity_loader(true); // 用于接收所有的数据 $data=file_get_contents("php://input"); $postObj = (array)simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA); //此处 用于变更订单的支付状态 或者其他操作 // 下面更新成功的变量(更新数据表) 最后一个 更新字段后 //此处用于返回给微信支付通知,我们也做出相应的修改 if(){ echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>'; } }
function posturl($data, $url){ $ch = curl_init(); //指定URL curl_setopt($ch, CURLOPT_URL, $url); //设定请求后返回结果 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //声明使用POST方式来进行发送 curl_setopt($ch, CURLOPT_POST, 1); //发送什么数据呢 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //忽略证书 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //if($is_pem == 1){ curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); //sslCertType curl_setopt($ch,CURLOPT_SSLCERT,'../key/wxpay/apiclient_cert.pem');//证书路径 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); //sslKeyType curl_setopt($ch,CURLOPT_SSLKEY,'../key/wxpay/apiclient_key.pem');//证书路径 // } //忽略header头信息 curl_setopt($ch, CURLOPT_HEADER, 0); //设置超时时间 curl_setopt($ch, CURLOPT_TIMEOUT, 10); //发送请求 $output = curl_exec($ch); //关闭curl curl_close($ch); //返回数据 return $output; }
上面If里面可以填写 证书路径地址 附带的文件 可以以不用IF 直接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码