php怎么做支付宝原路退回_PHP实现微信退款功能_weixin_39710951的博客-程序员宅基地

技术标签: 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();

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39710951/article/details/112804722

智能推荐

js进阶Web APIs05---offset、client、scroll属性_兰兰的小窝的博客-程序员宅基地

offsetPS:获得元素距离带有定位父元素的位置元素的宽和高含:padding + border + width 返回的数值不带单位注意区分:(1)offsetParent与parentNode①offsetParent:返回带有定位的父亲 否则返回的是body②parentNode:返回父亲 是最近一级的父亲 亲爸爸 不管父亲有没有定位(2)offset与styleA. offsetoffset 可以得到任意样式表中的样式值offset 系列获得的数值是没有单位的offs

基于金融业顾客生命周期的商业分析_JMP数据分析的博客-程序员宅基地

随着近些年商业银行之间的竞争逐渐加大,客户,作为银行利润的最终来源就愈发重要。银行若要提高自身盈利能力,对客户价值的挖掘与深入洞察必不可少。客户分级就是常用的方法之一。客户分级,即:基于客户需求的异质性和银行资源的有限性、对客户群体根据不同维度进行细分的过程。其主要有两类模式:依据商业价值与账户活跃周期。随着移动互联网技术和金融科技的发展,银行的功能也发生了转变,原有的客户分级方法可能存在一定的局限性。基于客户全生命周期的精准客户分级与科学分析势在必行。那么,当下的银行业:客户分级应该如何来改进

ubuntu 13.04 mysql_Ubuntu13.04 下MySQL5.6安装过程_瓦克五的博客-程序员宅基地

1.mysql下载:按照自己系统选择 http://www.mysql.com/downloads/installer/2.mysql依赖包安装 (libaio1.so) 若已安装可以省略:sudo apt-get install libaio1sudo apt-get install cmake libncurses5-dev bison g++ (可不选,有问题时再执行)3.组及用户创建:...

python pip命令报错 invlid systax_pip执行命令过程报错-SyntaxError: invalid syntax_weixin_39841825的博客-程序员宅基地

pip执行命令过程中出现错误,异常代码如下:Traceback (most recent call last):File "/usr/bin/pip", line 7, in from pip._internal.main import mainFile "/usr/lib/python2.6/site-packages/pip/_internal/main.py", line 13, in fr...

中国情侣必去的国内十大浪漫圣地_ximenchuixuezijin的博客-程序员宅基地

1、丽江——追寻一米阳光的传说         清冷的玉龙雪山顶上,终年云雾缭绕,即使是在最晴朗的天气,阳光也很难穿透云层,传说每年秋分是日月交合同辉同映的日子,只有在特别偶然的时刻,才能看到有一米长的阳光照在山顶,而被这道阳光照耀到的人就能拥有一世不变的爱情。也许,这一瞬间

DuiLib消息处理剖析_a539284554的博客-程序员宅基地

本来想自己写写duilib的消息机制来帮助duilib的新手朋友,不过今天发现已经有人写过了,而且写得很不错,把duilib的主干消息机制都说明了,我就直接转载过来了,原地址:http://blog.163.com/hao_dsliu/blog/static/1315789082014101913351223/duilib官方github地址:...

随便推点

java 矩阵乘向量_矩阵乘法运算-JAVA实现_核桃英语的博客-程序员宅基地

用JAVA写了个矩阵乘法运算.没什么好解释的.直接贴代码吧.public class Matrix {int row;int col;private int[][] array;private Matrix(){//构造函数私有化,使用setArray方法进行初始化}public int[][] getArray() {return array;}public void setArray(int[...

docker版本包 乌班图_Ubuntu安装Docker社区版_馥菲的博客-程序员宅基地

Docker社区版叫Docker -ce如果安装有老的docker先删除老的版本sudo apt-getremove docker docker-engine docker.io先更新包信息sudo apt-getupdate安装libltdl7sudo apt-getinstall libltdl7下载最新版本的安装包(其他版本可以在docker下载地址找到)wget https://downl...

C++ 拷贝构造函数中Private权限问题_startAt24的博客-程序员宅基地

自己以前的理解中Private是限制了类中数据的访问权限,在外部无法访问。今天阅读拷贝构造函数的时候看到了这样的例子:class MyString {private: char* m_pData; size_t m_iLen; void _init_data(const char* s) { m_pData = new char[m_iLen + 1]; memcpy(m_pDat...

EBS的性能调优_csdn13681123263的博客-程序员宅基地

metalink Tuning performance on eBusiness suite (Doc ID 744143.1) 这篇文档描述了如何调查电子商务套件的整体性能下降。特别是,我们强调...

python ttf font weight_解决 font-weight 无效的问题_weixin_39560924的博客-程序员宅基地

近期调页面时有几个 font-weight 需要修改,无论怎么调整字体粗细都没有变化,深入研究后总结下文初探本地写个例子,代码如下This is a paragraphThis is a paragraphThis is a paragraphp {font-size: 50px;}p.thin {font-weight: 100;}p.normal {font-weight: normal;}p...

java处理excel文件_沉默的巴坦木的博客-程序员宅基地

jxl是一个韩国人写的java操作excel的工具, 在java的开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI(即jxl)。jxl功能相对POI比较弱一点。 但jExcelAPI对中文支持非常好,API是纯Java的, 不依赖Windows系统,即使运行在Linux下,也同样能够正确的处理Excel文件。 需要补充说明的是,jxl对图形和图表的支持很有限,而

推荐文章

热门文章

相关标签