php微信支付流程(PHP实现微信退款的方法示例)
类别:编程学习 浏览量:2763
时间:2022-04-01 00:28:50 php微信支付流程
PHP实现微信退款的方法示例本文实例讲述了PHP实现微信退款的方法。分享给大家供大家参考,具体如下:
|
$obj = new WXRefund( '参数' ); $obj ->refundApi(); |
直接能用 公众号的参数 自己加上吧 只能帮你们到这了!
|
<?php namespace Wechat; /** * 微信退款 * @author zzy * @version $V1.0.0$ * @date 2018-11-9 */ class WXRefund { protected $SSLCERT_PATH = '' ; //证书 protected $SSLKEY_PATH = '' ; //证书 protected $opUserId = '' ; //商户号 protected $key = '' ; //API密钥 protected $appId = '' ; //appId function __construct( $outTradeNo , $totalFee , $outRefundNo , $refundFee ) { //初始化退款类需要的变量 $this ->totalFee = $totalFee ; //订单金额 $this ->refundFee = $refundFee ; //退款金额 $this ->outTradeNo = $outTradeNo ; //订单号 $this ->outRefundNo = $outRefundNo ; //退款订单 } /** * 通过微信api进行退款流程 唯一对外接口 * @return string */ public function refundApi() { $parma = array ( 'appid' => $this ->appId, 'mch_id' => $this ->opUserId, 'nonce_str' => randoms(32), //这个是随机数 自己封装去吧。。。 'out_refund_no' => $this ->outRefundNo, 'out_trade_no' => $this ->outTradeNo, 'total_fee' => intval ( $this ->totalFee * 100), 'refund_fee' => intval ( $this ->refundFee * 100), ); $parma [ 'sign' ] = $this ->getSign( $parma , $this ->key); $xmldata = $this ->arrayToXml( $parma ); $xmlresult = $this ->postXmlSSLCurl( $xmldata , 'https://api.mch.weixin.qq.com/secapi/pay/refund' ); $result = $this ->arrayToXml( $xmlresult ); return $result ; } /** * 数组转xml * @param $arr * @return string */ protected function arrayToXml( $arr ) { $xml = "<xml>" ; foreach ( $arr as $key => $val ) { if ( is_numeric ( $val )) { $xml .= "<" . $key . ">" . $val . "</" . $key . ">" ; } else { $xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">" ; } } $xml .= "</xml>" ; return $xml ; } /** * 签名加密 * @param $params * @param $key */ protected function getSign( $params , $key ) { ksort( $params , SORT_STRING); $unSignParaString = $this ->formatQueryParaMap( $params , false); return $signStr = strtoupper (md5( $unSignParaString . "&key=" . $key )); } /** * 排序 * @param $paraMap * @param bool $urlEncode * @return bool|string */ protected function formatQueryParaMap( $paraMap , $urlEncode = false) { $buff = "" ; ksort( $paraMap ); foreach ( $paraMap as $k => $v ) { if (null != $v && "null" != $v ) { if ( $urlEncode ) { $v = urlencode( $v ); } $buff .= $k . "=" . $v . "&" ; } } $reqPar = '' ; if ( strlen ( $buff ) > 0) { $reqPar = substr ( $buff , 0, strlen ( $buff ) - 1); } return $reqPar ; } /** * 需要使用证书的请求 * @param $xml * @param $url * @param int $second * @return bool|mixed */ protected function postXmlSSLCurl( $xml , $url , $second = 30) { $ch = curl_init(); curl_setopt( $ch , CURLOPT_TIMEOUT, $second ); curl_setopt( $ch , CURLOPT_URL, $url ); curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt( $ch , CURLOPT_HEADER, FALSE); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, TRUE); curl_setopt( $ch , CURLOPT_SSLCERTTYPE, 'PEM' ); curl_setopt( $ch , CURLOPT_SSLCERT, $this ->SSLCERT_PATH); curl_setopt( $ch , CURLOPT_SSLKEYTYPE, 'PEM' ); curl_setopt( $ch , CURLOPT_SSLKEY, $this ->SSLKEY_PATH); curl_setopt( $ch , CURLOPT_POST, true); curl_setopt( $ch , CURLOPT_POSTFIELDS, $xml ); $data = curl_exec( $ch ); if ( $data ) { curl_close( $ch ); return $data ; } else { $error = curl_errno( $ch ); echo "curl出错,错误码:$error" . "<br>" ; curl_close( $ch ); return false; } } } |
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣
- php代码最可靠的加密方式(php DES加密算法实例分析)
- php如何异步操作(php链式操作的实现方式分析)
- php加密平台(PHP7实现和CryptoJS的AES加密方式互通示例AES-128-ECB加密)
- phpstudy显示403(phpStudy配置多站点多域名方法及遇到的403错误解决方法)
- 虚拟机windows server安装php环境(winxp apache用php建本地虚拟主机的方法)
- php探针哪个牌子好用(php探针使用原理和技巧讲解)
- php联合注入列表总结(php中的依赖注入实例详解)
- thinkphp 多维度展示数据(Thinkphp自定义生成缩略图尺寸的方法)
- phpstudy数据库搭建教程交流(phpStudy V8如何修改数据库root密码)
- thinkphp5设计权限(Thinkphp5.0 框架视图view的比较标签用法分析)
- iis运行php程序(Windows2003+IIS7 Express使用FastCgi运行php)
- php异常和错误区别(PHP批斗大会之缺失的异常详解)
- thinkphp怎么整合微信支付(ThinkPHP框架实现的微信支付接口开发完整示例)
- php对接微信付款(PHP微信支付功能示例)
- php 面向对象与面向过程(php面向对象重点知识分享)
- dedecms的dedesql.class.php on line 489错误的解决方法(dedecms的dedesql.class.php on line 489错误的解决方法)
- 今天 3月13日,31年前,一个英雄少年感动了中国(今天3月13日31年前)
- 你好,新成理人丨成都理工大学2019级新生开学典礼隆重举行(新成理人丨成都理工大学2019级新生开学典礼隆重举行)
- 这部民警编演的红色话剧,讲述了一个不断追寻的故事(这部民警编演的红色话剧)
- 日本菜有什么好吃(日本菜有什么好吃的做法)
- 韩国泡菜做法(韩国泡菜的做法步骤)
- 泰国旅游攻略(泰国旅游攻略必去景点)
热门推荐
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9