php做一个微信退款,PHP实现微信退款功能

大家好,我是小编,最近在调微信退款接口,发现有许多坑,更大家分享一下

① 要是在测试的时候,网页提示 curl 58 说明 证书的路径出现问题(这里要填物理路径,也就是绝对路径)

②网页提示curl 52 说明你的证书引入少了,在官方的demo上只有两个证书 apiclient_cert.pem和 apiclient_key.pem  你还需要引入一个证书 rootca.pem,这个证书需要你登录到

你的商户平台上下载

3.要是网页提示  "HTTP/1.1 200 OK Server: nginx Date: Tue, 20 Jun 2017 08:08:01 GMT Content-Type: text/plain Content-Length: 852 Connection: keep-alive Keep-Alive: timeout=8说明你的代码是没有问题的 ,应该是参数出错了 我之前错的地方是把 out_refund_no和 out_trade_no写的一样,微信官网上也是这样写的 ,但是就是出现问题,我把out_refund_no 修改了一下 发现可以了

注意:金额的单位是分

下面就是我写的接口

function Home_index() { date_default_timezone_set("Asia/Shanghai"); $date = date("YmdHis"); $appid = ""; $mch_id = ""; $out_trade_no = "14487658021497944120"; $op_user_id = ""; $out_refund_no = $date; $total_fee = "500"; $refund_fee = "500";// $transaction_id = "4009542001201706206596667604"; $key = ""; $nonce_str = nonceStr(); $ref = strtoupper(md5("appid=$appid&mch_id=$mch_id&nonce_str=$nonce_str&op_user_id=$op_user_id" . "&out_refund_no=$out_refund_no&out_trade_no=$out_trade_no&refund_fee=$refund_fee&total_fee=$total_fee" . "&key=$key")); //sign加密MD5 $refund = array( "appid" =>$appid, //应用ID,固定 "mch_id" => $mch_id, //商户号,固定 "nonce_str" => $nonce_str, //随机字符串 "op_user_id" => $op_user_id, //操作员 "out_refund_no" => $out_refund_no, //商户内部唯一退款单号 "out_trade_no" => $out_trade_no, //商户订单号,pay_sn码 1.1二选一,微信生成的订单号,在支付通知中有返回 // "transaction_id"=>"1",//微信订单号 1.2二选一,商户侧传给微信的订单号 "refund_fee" => $refund_fee, //退款金额 "total_fee" => $total_fee, //总金额 "sign" => $ref//签名 ); $url = "https://api.mch.weixin.qq.com/secapi/pay/refund"; ; //微信退款地址,post请求 $xml = arrayToXml($refund); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); //证书检查 if ($useCert == true) { // 设置证书 curl_setopt($ch, CURLOPT_SSLCERTTYPE, "pem"); curl_setopt($ch, CURLOPT_SSLCERT, dirname(__FILE__) . "/WxPay/cert/apiclient_cert.pem"); curl_setopt($ch, CURLOPT_SSLCERTTYPE, "pem"); curl_setopt($ch, CURLOPT_SSLKEY, dirname(__FILE__) . "/WxPay/cert/apiclient_key.pem"); curl_setopt($ch, CURLOPT_SSLCERTTYPE, "pem"); curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . "/WxPay/cert/rootca.pem"); } curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); $xml = curl_exec($ch); // 返回结果0的时候能只能表明程序是正常返回不一定说明退款成功而已 if ($xml) { curl_close($ch); // 把xml转化成数组 libxml_disable_entity_loader(true); $xmlstring = simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA);// var_dump($xmlstring); $result["errNum"] = 0; $result["info"] = object_to_array($xmlstring);// var_dump($result); return $result; } else { $error = curl_errno($ch); curl_close($ch); // 错误的时候返回错误码。 $result["errNum"] = $error; return $result; }} function arrayToXml($arr) { $xml = ""; foreach ($arr as $key => $val) { if (is_array($val)) { $xml .= "" . arrayToXml($val) . "" . $key . ">"; } else { $xml .= "" . $val . "" . $key . ">"; } } $xml .= ""; return $xml;}

function object_to_array($obj) { $obj = (array) $obj; foreach ($obj as $k => $v) { if (gettype($v) == "resource") { return; } if (gettype($v) == "object" || gettype($v) == "array") { $obj[$k] = (array) object_to_array($v); } } return $obj;} function nonceStr() { $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str = ""; $length = 32; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } // 随机字符串 return $str;} Home_index();

赶快添加到你的项目中去吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持网页设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php显示时间,php实现用已经过去多长时间的方式显示时间

本文实例讲述了php用已经过去多长时间的方式显示时间的方法。分享给大家供大家参考。具体如下&#xff1a;这里以一种可读性比较好的方式显示已经过去多长时间&#xff0c;比如&#xff1a;距离现在10秒&#xff0c;距离现在1天等等。function time_is_older_than($t, $check_t…

java中日期计算时间差,java中依据,两个日期,计算时间差

java中根据&#xff0c;两个日期&#xff0c;计算时间差。分别获取两个时间的毫秒数Date.getTime()&#xff0c;相减&#xff0c;得到的值/1000为秒数&#xff0c;/60*1000为分钟数&#xff0c;/60*60*1000为小时数。/*** 计算时间差** param begin* param end* return*/public…

php获取token失败,微信开发,老是获取token失败

微信开发&#xff0c;总是获取token失败$appid wx1aabc8673b8f103a;$appsecret 9aa99fc9db9bf1321c1afe05feb29b6c;$url "https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appid$appid&secret$appsecret";$urlhttps://api.weixin.…

2008下php上传文件崩溃,php – 当用户反复尝试上传无效文件类型时,网站崩溃

我试图理解错误……我有一个允许用户上传CSV的网络应用程序.如果文件类型不是CSV,则不会发生任何操作,页面只显示“无效的文件类型”.如果用户尝试上载无效的文件类型并反复单击触发处理上载的PHP文件的按钮,则PHP文件最终会无响应,并且网站崩溃时出现以下错误&#xff1a;&quo…

java错误1601解决方法,求助解决错误

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)at …

java == hashcode,java中==和equals和hashCode的区别

java中和equals和hashCode的区别 的作用&#xff1a;基本类型&#xff1a;比较的就是值是否相同引用类型&#xff1a;比较的就是地址值是否相同(确切的说&#xff0c;是堆内存地址)equals 的作用:引用类型&#xff1a;默认情况下&#xff0c;比较的是地址值。public boolean eq…

java经典设计模式4,JAVA设计模式(4) 之装饰设计模式

在现实生活中我们的汽车都具备跑的功能&#xff0c;我们可以不改变汽车原有功能的前提下&#xff0c;把它放入一个装修厂&#xff0c;开进去让里面给咱们的车子做一些装饰&#xff0c;开出来之后呢&#xff0c;就具备了上天的功能了(技术可达是可以的哈)&#xff0c;这就给原来…

java读取gxk文件,Java中常见的IO流及其使用

Java中IO流分成两大类&#xff0c;一种是输入流&#xff0c;所有的输入流都直接或间接继承自InputStream抽象类&#xff0c;输入流作为数据的来源&#xff0c;我们可以通过输入流的read方法读取字节数据&#xff1b;另一种是输出流&#xff0c;所有的输出流都直接或间接继承自O…

matlab+voronoin函数,在Voronoi区域中生成随机点,并创建具有高维数据的Voronoi区域...

我正在使用k-means聚类算法&#xff0c;并且对于每个聚类质心&#xff0c;我试图为质心生成n维Voronoi区域 . 之后我需要从Voronoi区域生成随机点 .我已经尝试使用Matlab / Octave和scipy来获得n维Voronoi区域 . 但我有两个问题 .生成顶点和区域后&#xff0c;如何从区域生成随…

matlab双纵轴刻度覆盖问题,求助: matlab双纵轴换图问题

非常感谢&#xff01;不过&#xff0c;y2的范围是-1*(10^6),7*(10^6),但是不等分:(把y1的范围调成0.4:0.2:5.8也有28个元素&#xff0c;然后y2也有28个元素&#xff0c;但是不等分&#xff0c;是个曲线&#xff0c;而且&#xff0c;这个曲线的值与y1是有关的。数据见附件syms d…

php最新图片漏洞,2018最新PHP漏洞利用技巧

本文学习了几种新式的php exploit方法&#xff0c;在此做一笔记文件删除漏洞, unlink()Phar 反序列化, file*()PHP对象实例化, ReflectionClass()0x01 WordPress Design Flaw Leads to WooCommerce RCEWooCommerce 3.4.6本版本之前存在任意删除漏洞&#xff0c;因为WordPress的…

php v-for=,Vue中v-for循环节点的实现代码

本篇文章给大家带来的内容是关于Vue中v-for循环节点的实现代码&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。Title父循环第一次子循环第一次json数据的第几条数值{{index}}{{indo}}{{bp.index}}{{bp.childName}}let ernew …

matlab寻找向量最小值,matlab – 在排序向量中快速搜索大于x的最小值

由于输入已经排序,自定义二进制搜索应该有效(您可能需要对边缘情况进行一些更新,即请求的值小于数组的所有元素)&#xff1a;function [result, res2] binarySearchExample(val)%// Generate example data and sort itN 100000000;a rand(N, 1);a sort(a);%// Run the algo…

搜matlab代码的网站,LTE小区搜索matlab仿真

【实例简介】LTE小区搜索过程的matlab仿真&#xff0c;比较详细&#xff0c;内容不错【实例截图】【核心代码】35738649matlab└── matlab├── Bc.m├── CellSearch.m├── PSS_detection_correction.m├── Tc.m├── absx2.m├── add_header_to_bin.m├── add_h…

php过气了吗,留几手 留几手过气原因

1、很多时候&#xff0c;人们做事情只是为了自己&#xff0c;没有任何理由&#xff0c;没有任何结果&#xff0c;只是为了满足一些内心的期望。2、太理智的人&#xff0c;往往爱到一半&#xff0c;本能地退却。唯一突出的是他的JB。3、怎样才能自由地睡去女文艺青年&#xff1f…

live2d PHP,Live2dHistoire_setting.php

if(!defined(EMLOG_ROOT)) {exit(error!);}function plugin_setting_view(){$live2d_setunserialize(ltrim(file_get_contents(dirname(__FILE__)./live2d.com.php),<?php die; ?>));?>KEY&#xff1a;音乐1&#xff1a;音乐2&#xff1a;音乐3&#xff1a;音乐4&a…

mysql 远程load data,PyMySQL将(文件)数据加载到远程MySQL实例时发生错误/异常

我正在使用PyMySQL-0.5.0并在将数据从文件加载到远程MySQL实例时遇到了一个模糊的错误/异常。在执行“loaddatalocalinfile…”语句时&#xff0c;我看到一个异常&#xff0c;它说&#xff1a;The used command is not allowed with this MySQL version。在如果PyMySQL支持此操…

matlab频率阻抗,有分析阻抗的matlab脚本吗?

以上来自于谷歌翻译以下为原文Interesting...- You cross-posted to two forums. I have deleted the other post.- You dont indicate what scope you are using or what you have tried.Most Keysight (and Agilent) scopes have an FFT or Spectrum function available. Hav…

php中修改弹窗的样式,CSS变形弹窗效果示例

大家都知道&#xff0c;弹出窗体已经是现在网页常用的一种交互设计&#xff0c;在这个注重交互动画体验的时代&#xff0c;网页弹窗也是可以来点新鲜点子的&#xff0c;比如今天分享的CSS 变形Modal Window。当用户点击按钮时&#xff0c;按钮将会变成一个全屏的屏幕&#xff0…

php 开发高德地图地理围栏,高德地图-地理围栏功能实现

最近需要实现一个地理围栏相关的功能。项目是和骑行相关的&#xff0c;主要是当游客或者骑友定位地址进入到对应的景点的地理围栏里面&#xff0c;则播报景点相关的报道语音。接到需求之后&#xff0c;我开始查看高德的相关API&#xff0c;由于围栏是多边形的&#xff0c;则需要…