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

威富通支付接口用到的操作类(记录下)相关推荐

  1. 关于威富通的微信扫码支付处理思路和流程

    关于威富通的微信扫码支付处理思路和流程 有个客户需要使用威富通的微信扫码支付,我来给处理下 首选下载官方的文档 https://open.swiftpass.cn/openapi/doc?index_ ...

  2. 与建行进行善付通支付接口小知识

    与建行进行善付通支付接口小知识 1.测试环境 目前做的工作都是为了更顺利的与生产环境进行对接. 2.生产环境 测试环境没问题后,申请生产环境的开发==一般需要三到五天==: 3.感觉最坑人的地方 1. ...

  3. 威富通科技软件测试笔试题

    刚从高新园回来,记录一下去威富通面试的过程. 26楼,进门登记后,前台小姐姐(穿着我双十一下单的阿迪达斯!...(⊙o⊙)-)会给一份软件测试笔试题.主要内容有: 一.软件测试理论,像什么软件测试流程 ...

  4. 富友支付接口对接不是必填的值如何处理

    1.拿注册接口举例子 正常需要的签名明文: back_notify_url+"|"+bank_nm+"|"+capAcntNo+"|"+ce ...

  5. 第三方支付接口之微信扫码支付

    此篇文章是为了记录学习如何编写第三方支付接口,熟悉这个流程.使用的是威富通第三方支付平台https://open.swiftpass.cn/ 对接的是微信扫码和公总号支付 基本成员:用户,商户,第三方 ...

  6. 微信支付接口怎么申请 微信支付接口申请教程

     微信支付接口:点击进去 一直让大家翘首以盼的微信最核心的杀手锏--"微信支付"终于开放申请了!今天微信团队在官网发布消息,微信公众平台支付功能已正式开放申请,已开通公众号的 ...

  7. 个人商家怎么申请微信支付接口

    微信支付接口:点击进去 一直让大家翘首以盼的微信最核心的杀手锏--"微信支付"终于开放申请了!今天微信团队在官网发布消息,微信公众平台支付功能已正式开放申请,已开通公众号的开发者可 ...

  8. php 通联支付demo,通联支付接口示例源码(.net/php/java)

    通联支付接口示例源码(.net/php/java) c# 2020-12-25 下载地址 https://www.codedown123.com/57372.html 资源下载此资源下载价格为2D币, ...

  9. 富友支付 统一下单接口 自创php版本demo

    看了文档才发现demo只有java版本的 那可不妙啊 还好在我的坚持与努力下 终于参透了这文档. 就这个文档 富友开放接口文档  有一说一这个验签的方式还是很简介的直接md5验签 害我找了半天的DES ...

  10. java 通联支付接口_通联支付接口.rar

    1 通联接口\unionorder_demo\java\uniondemo\.classpath 841 Bytes 2018/3/19 11:18:42 2 通联接口\unionorder_demo ...

最新文章

  1. 用户、组的管理常用到的命令介绍
  2. codeforces570C
  3. reactjs入门示例
  4. 【Tomcat】初次配置Tomcat的那些糟心事
  5. 松哥整理了 15 道 Spring Boot 高频面试题,看完当面霸
  6. JAVA如何选中一行上移_js操作table中tr的顺序实现上移下移一行的效果
  7. 161009_qt显示阿拉伯输入法9x7点阵
  8. 提取频散曲线matlab程序,2.2 PCDISP圆柱杆频散曲线求解
  9. 周伟焜:杨元庆一定会带领联想成功
  10. java 登陆短信验证码_JAVA短信验证登录
  11. OpenCV python 轮廓的极值点
  12. Linux下Moudle工具的介绍与使用
  13. 5e连不上服务器如何修改Dns,Ubuntu 18.04 永久修改DNS的方法
  14. 天琴协议_天琴座:新秀背后
  15. Android地图定位-百度地图上定位自己所在的位置
  16. 如果你已经厌倦了情人节的玫瑰
  17. spring源码bean生命周期篇 一 如何实例化对象
  18. 飞塔防火墙HA详解与配置
  19. 谷歌研究——四足机器人模仿动物动作
  20. 由“三姬分金”到“海盗分金”

热门文章

  1. 噪声调相干扰matlab程序,噪声调相干扰信号的性能仿真
  2. 通信原理 | 滤波器:模拟滤波器和数字滤波器
  3. 高压输电线路线夹温度监测系统装置
  4. 用Rust保存Windows聚焦图片
  5. 介绍H桥电机驱动电路
  6. 公网远程Everything快速搜索私有云资料【内网穿透】
  7. 浏览器中使用Github
  8. Linux虚拟机网络配置
  9. mysql 数据库建模工具 mysqlworkbench
  10. PDF中如何删除文字