威富通支付接口用到的操作类(记录下)
1 <?php 2 /** 3 * 威富通支付接口 4 */ 5 class SwiftpassClient { 6 7 function __construct() { 8 //todo 9 } 10 11 // 获取请求支付的页面url 12 public function getUrl($url, $postData) 13 { 14 ksort($postData); 15 $postData = $this->urlencode_array($postData); 16 $postData['sign'] = md5(implode('', $postData) . md5('!!wxpay!!')); 17 return $url . '?' . http_build_query($postData); 18 } 19 20 // 获取签名信息 21 public function getSign($postData, $key) 22 { 23 $returnStr = ''; 24 if ($postData) { 25 if (isset($postData['sign'])) unset($postData['sign']); 26 ksort($postData); 27 $signStr = ''; 28 foreach ($postData as $_k => $_v) { 29 $signStr .= "{$_k}={$_v}&"; 30 } 31 $signStr .= 'key=' . $key; 32 $returnStr = strtoupper(md5($signStr)); 33 } 34 35 return $returnStr; 36 } 37 38 // 生成随机码 默认16位 39 public function getRandKey($digit=16) 40 { 41 $returnStr = ''; 42 // A-Za-z0-9 共62个 43 $baseKey = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; 44 $randKeyArr = str_split($baseKey); 45 $maxLen = count($randKeyArr); 46 47 for ($i=0; $i<$digit; $i++) { 48 // 每10次, 打乱一次 49 if (($i % 10) == 0) shuffle($randKeyArr); 50 $k = $i % $maxLen; 51 $returnStr .= $randKeyArr{$k}; 52 } 53 54 return $returnStr; 55 } 56 57 // 解析PostData xml格式 58 public function xmlToArray($xmlStr) 59 { 60 return json_decode(json_encode(simplexml_load_string($xmlStr, 'SimpleXMLElement', LIBXML_NOCDATA)), true); 61 } 62 63 /** 64 * 将xml转换成数组 65 * @param $xmlData 66 * @return array 67 */ 68 public function xmlToArray2($xml) { 69 $xml = simplexml_load_string($xml); 70 //获取xml编码 71 $ret = preg_match ("/<?xml[^>]* encoding=\"(.*)\"[^>]* ?>/i", $xml, $arr); 72 if($ret) { 73 $encode = strtoupper ( $arr[1] ); 74 } else { 75 $encode = ""; 76 } 77 if($xml && $xml->children()) { 78 foreach ($xml->children() as $node){ 79 //有子节点 80 if($node->children()) { 81 $k = $node->getName(); 82 $nodeXml = $node->asXML(); 83 $v = substr($nodeXml, strlen($k)+2, strlen($nodeXml)-2*strlen($k)-5); 84 85 } else { 86 $k = $node->getName(); 87 $v = (string)$node; 88 } 89 90 if($encode!="" && $encode != "UTF-8") { 91 $k = iconv("UTF-8", $encode, $k); 92 $v = iconv("UTF-8", $encode, $v); 93 } 94 95 $parameters[$k] = $v; 96 } 97 } 98 return $parameters; 99 } 100 101 // 数组转xml 102 public function arrayToXml($array) 103 { 104 $returnStr = "<xml>"; 105 foreach ($array as $key => $val) { 106 if (is_numeric($val)) { 107 $returnStr .= "<".$key.">".$val."</".$key.">"; 108 } else { 109 $returnStr .= "<".$key."><![CDATA[".$val."]]></".$key.">"; 110 } 111 } 112 $returnStr .= "</xml>"; 113 return $returnStr; 114 } 115 116 117 // 数组值urlencode编码 118 public function urlencode_array($array) 119 { 120 if (is_array($array)) { 121 foreach ($array as $_key => $_val) { 122 $array[$_key] = $this->urlencode_array($_val); 123 } 124 } else { 125 $array = rawurlencode($array); 126 } 127 128 return $array; 129 } 130 131 // 数组值urldecode解码 132 public function urldecode_array($array) 133 { 134 if (is_array($array)) { 135 foreach ($array as $_key => $_val) { 136 $array[$_key] = $this->urldecode_array($_val); 137 } 138 } else { 139 $array = rawurldecode($array); 140 } 141 142 return $array; 143 } 144 145 // post xml数据 146 public function postXml($url, $array) 147 { 148 // curl初始化设置 149 $ch = curl_init(); 150 curl_setopt($ch, CURLOPT_TIMEOUT, 14); // 设置超时 151 curl_setopt($ch, CURLOPT_URL, $url); 152 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 153 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 154 curl_setopt($ch, CURLOPT_HEADER, false); 155 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 156 curl_setopt($ch, CURLOPT_POST, true); 157 curl_setopt($ch, CURLOPT_POSTFIELDS, $array); 158 159 // 运行curl 160 $response = curl_exec($ch); 161 curl_close($ch); 162 163 return $response; 164 } 165 166 public function postXmlSSL($url, $array) 167 { 168 // curl初始化设置 169 $ch = curl_init(); 170 curl_setopt($ch, CURLOPT_TIMEOUT, 14); // 设置超时 171 curl_setopt($ch, CURLOPT_URL, $url); 172 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 173 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 174 curl_setopt($ch, CURLOPT_HEADER, false); 175 curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM'); 176 curl_setopt($ch, CURLOPT_SSLCERT, '证书路径'); 177 curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM'); 178 curl_setopt($ch, CURLOPT_SSLKEY, '密钥路径'); 179 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 180 curl_setopt($ch, CURLOPT_POST, true); 181 curl_setopt($ch, CURLOPT_POSTFIELDS, $array); 182 183 // 运行curl 184 $response = curl_exec($ch); 185 curl_close($ch); 186 187 return $response; 188 } 189 190 } 191 ?>
转载于:https://www.cnblogs.com/duoduoxi/p/5407202.html
威富通支付接口用到的操作类(记录下)相关推荐
- 关于威富通的微信扫码支付处理思路和流程
关于威富通的微信扫码支付处理思路和流程 有个客户需要使用威富通的微信扫码支付,我来给处理下 首选下载官方的文档 https://open.swiftpass.cn/openapi/doc?index_ ...
- 与建行进行善付通支付接口小知识
与建行进行善付通支付接口小知识 1.测试环境 目前做的工作都是为了更顺利的与生产环境进行对接. 2.生产环境 测试环境没问题后,申请生产环境的开发==一般需要三到五天==: 3.感觉最坑人的地方 1. ...
- 威富通科技软件测试笔试题
刚从高新园回来,记录一下去威富通面试的过程. 26楼,进门登记后,前台小姐姐(穿着我双十一下单的阿迪达斯!...(⊙o⊙)-)会给一份软件测试笔试题.主要内容有: 一.软件测试理论,像什么软件测试流程 ...
- 富友支付接口对接不是必填的值如何处理
1.拿注册接口举例子 正常需要的签名明文: back_notify_url+"|"+bank_nm+"|"+capAcntNo+"|"+ce ...
- 第三方支付接口之微信扫码支付
此篇文章是为了记录学习如何编写第三方支付接口,熟悉这个流程.使用的是威富通第三方支付平台https://open.swiftpass.cn/ 对接的是微信扫码和公总号支付 基本成员:用户,商户,第三方 ...
- 微信支付接口怎么申请 微信支付接口申请教程
微信支付接口:点击进去 一直让大家翘首以盼的微信最核心的杀手锏--"微信支付"终于开放申请了!今天微信团队在官网发布消息,微信公众平台支付功能已正式开放申请,已开通公众号的 ...
- 个人商家怎么申请微信支付接口
微信支付接口:点击进去 一直让大家翘首以盼的微信最核心的杀手锏--"微信支付"终于开放申请了!今天微信团队在官网发布消息,微信公众平台支付功能已正式开放申请,已开通公众号的开发者可 ...
- php 通联支付demo,通联支付接口示例源码(.net/php/java)
通联支付接口示例源码(.net/php/java) c# 2020-12-25 下载地址 https://www.codedown123.com/57372.html 资源下载此资源下载价格为2D币, ...
- 富友支付 统一下单接口 自创php版本demo
看了文档才发现demo只有java版本的 那可不妙啊 还好在我的坚持与努力下 终于参透了这文档. 就这个文档 富友开放接口文档 有一说一这个验签的方式还是很简介的直接md5验签 害我找了半天的DES ...
- java 通联支付接口_通联支付接口.rar
1 通联接口\unionorder_demo\java\uniondemo\.classpath 841 Bytes 2018/3/19 11:18:42 2 通联接口\unionorder_demo ...
最新文章
- 用户、组的管理常用到的命令介绍
- codeforces570C
- reactjs入门示例
- 【Tomcat】初次配置Tomcat的那些糟心事
- 松哥整理了 15 道 Spring Boot 高频面试题,看完当面霸
- JAVA如何选中一行上移_js操作table中tr的顺序实现上移下移一行的效果
- 161009_qt显示阿拉伯输入法9x7点阵
- 提取频散曲线matlab程序,2.2 PCDISP圆柱杆频散曲线求解
- 周伟焜:杨元庆一定会带领联想成功
- java 登陆短信验证码_JAVA短信验证登录
- OpenCV python 轮廓的极值点
- Linux下Moudle工具的介绍与使用
- 5e连不上服务器如何修改Dns,Ubuntu 18.04 永久修改DNS的方法
- 天琴协议_天琴座:新秀背后
- Android地图定位-百度地图上定位自己所在的位置
- 如果你已经厌倦了情人节的玫瑰
- spring源码bean生命周期篇 一 如何实例化对象
- 飞塔防火墙HA详解与配置
- 谷歌研究——四足机器人模仿动物动作
- 由“三姬分金”到“海盗分金”