微信支付+服务器+php代码,php 微信支付企业付款(示例代码)

/**

* 格式化参数格式化成url参数*/

public function ToUrl($arr)

{$buff = "";foreach ($arr as $k => $v)

{if($k != "sign" && $v != "" && !is_array($v)){$buff .= $k . "=" . $v . "&";

}

}$buff = trim($buff, "&");return $buff;

}//将乱序的数组

public function ToSign($arr,$key)

{//签名步骤一:按字典序排序参数

ksort($arr);$string = ToUrl($arr);//签名步骤二:在string后加入KEY

$string = $string . "&key=".$key;//签名步骤三:MD5加密

$string = md5($string);//签名步骤四:所有字符转为大写

// $result1 = strtoupper($string);

return $string;

}/**

* 输出xml字符

* @throws WxPayException

**/

public static function ToXml($arr)

{if(!is_array($arr) || count($arr) <= 0)

{echo ‘数据异常‘;

}$xml = "";foreach ($arr as $key=>$val)

{if (is_numeric($val)){$xml.="".$val."".$key.">";

}else{$xml.="".$key.">";

}

}$xml.="";return $xml;

}/**

* zll 生成唯一订单号*/

public functionorder_sn(){$str = "qyfk".uniqid();return $str;

}/**

* zll 将信息提交到微信服务器,发起企业付款*/

public function qyzf_post($url,$xml,$config,$second=30){$ch =curl_init();

curl_setopt($ch,CURLOPT_TIMEOUT,$second);

curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);//curl_setopt($ch,CURLOPT_SSLCERT,"/home/lizi/addons/grow/template/mobile/cash/apiclient_cert.pem");

// curl_setopt($ch,CURLOPT_SSLKEY,"/home/lizi/addons/grow/template/mobile/cash/apiclient_key.pem");

$str = ‘D:/www/‘;//证书必须使用绝对路径,否则报错,错误貌似是52什么的

curl_setopt($ch,CURLOPT_SSLCERTTYPE,‘PEM‘);

curl_setopt($ch,CURLOPT_SSLCERT,$str.trim($config[‘apiclient_cert‘],‘.‘));

curl_setopt($ch,CURLOPT_SSLKEYTYPE,‘PEM‘);

curl_setopt($ch,CURLOPT_SSLKEY,$str.trim($config[‘apiclient_key‘],‘.‘));

curl_setopt($ch,CURLOPT_POST, 1);

curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);$data = curl_exec($ch);if($data){

curl_close($ch);return $data;

}else{$error = curl_errno($ch);echo "call faild, errorCode:$error\n";

curl_close($ch);return false;

}

}/**

* zll 企业付款*/

public function qiyezhifu($data){//解释amount为付款金额,单位分,貌似最低1元,desc为付款的描述(必填),ip就是服务器ip必填

//$data = array(‘wxappid‘=>14,‘openid‘=>‘oRyzq0LrtuqKqQdH-FubBqcMuTi8-‘,‘amount‘=>100,‘desc‘=>‘提现奖励‘,‘ip‘=>‘123.207.19.254‘);

//获取数据库的支付配置信息

$config = get_pay_conf($data[‘wxappid‘]);if($config){//对必备参数进行有效性判断

if(empty($config[‘appid‘]) || empty($config[‘shh‘]) || empty($config[‘partnerkey‘]) || empty($data[‘amount‘]) || empty($config[‘apiclient_cert‘]) || empty($config[‘apiclient_key‘])){throw new Exception("支付配置中的appid或商户号或支付秘钥不能为空,或支付金额不能为空");

}else{$da[‘mch_appid‘] = $config[‘appid‘]; //appid

$da[‘mchid‘] = $config[‘shh‘]; //商户号

$da[‘nonce_str‘] = $this->getStr(32); //随机字符串

$da[‘partner_trade_no‘] = $this->order_sn(); //订单号,保持唯一性即可

$da[‘openid‘] = $data[‘openid‘]; //粉丝的openid

$da[‘check_name‘] = "NO_CHECK"; //NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账) OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)

//$da[‘re_user_name‘] = ""; //收款用户真实姓名。 如果check_name设置为FORCE_CHECK或OPTION_CHECK,则必填用户真实姓名

$da[‘amount‘] = $data[‘amount‘]; //付款金额,单位分

$da[‘desc‘] = $data[‘desc‘] ? $data[‘desc‘]:"提现奖励"; //企业付款描述信息

$da[‘spbill_create_ip‘] = $data[‘ip‘] ? $data[‘ip‘] : "123.207.19.254"; //服务器ip

$da[‘sign‘] = $this->ToSign($da, $config[‘partnerkey‘]);//生成签名

//$da[‘key‘] = $config[‘partnerkey‘]; //支付秘钥

//将数组转为xml

$xml = $this->ToXml($da);$url = ‘https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers‘;$this->qyzf_post($url,$xml,$config);

}

}else{return false;

}

}

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

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

相关文章

Spark踩坑记——数据库(Hbase+Mysql)转

转自&#xff1a;http://www.cnblogs.com/xlturing/p/spark.html 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时&#xff0c;我们往往需要操作数据库&#xff0c;去统计或者改变一些值。最近一个实时消费者处理任务&#xff0c;在使用spark streaming进行…

解决Failed to connect session for conifg 故障

服务器升级openssh之后jenkins构建报错了&#xff0c;报错信息如下&#xff1a; Failed to connet or change directory jenkins.plugins.publish_over.BapPublisherException:Failed to connect session for config.....Message [Algorithm negotiation fail] 升级前ssh版本&a…

78oa mysql_78oa系统版本升级方法

可升级版本预览升级方法&#xff1a;1、备份数据库、附件目录、二次开发程序打开开始菜单——控制面板——管理工具——服务&#xff0c;右键点击停止 78oa mysql service 服务&#xff0c;完整复制【D:\78OA\server\modules\storage\data\78oa】(数据库)文件夹至备份区域。完整…

Excel导出显示服务器意外,C# 调用Excel 出现服务器出现意外状况. (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT)...

C# 调用Excel 出现服务器出现意外状况. (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT)htmlprivate Microsoft.Office.Interop.Excel.Application xApp;private Microsoft.Office.Interop.Excel.Workbook xBook;服务器//变量xApp new Microsoft.Office.Interop.Excel.Appl…

列表、元组、字典、集合的定义、操作与综合练习

l[A,B,C] t{A,B,C}l.append(B)print(l)scores[66,77,88]d{A:66,B:77,C:88} d[B]99 d[D]111 d.pop(C) print(d)s1{A,B,C} s2{A,C,D} print(s1&s2) print(s1|s2) 转载于:https://www.cnblogs.com/chenjunyu666/p/9147417.html

xargs

find /tmp/ -name "*.log" -mtime 4 | xargs -i -t mv {} /home/ find /tmp/ -name "*.log" -mtime 4 -print0 | xargs -0 rm -f xargs(1) xargs是给命令传递参数的一个过滤器&#xff0c;也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块…

export mysql home_mysql的Linux下安装笔记

注&#xff1a;在5.7之后MySQL不在生成my-default.cnf配置。tar -xzvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gzmv mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz/ /usr/local/mysql新建 useradd mysql新建文件夹mkdir /usr/local/mysql/data生成配置&#xff1a;./mysqld -…

[转]DevExpress GridControl 关于使用CardView的一点小结

最近项目里需要显示商品的一系列图片&#xff0c;打算用CardView来显示&#xff0c;由于第一次使用&#xff0c;遇到许多问题&#xff0c;发现网上这方面的资源很少&#xff0c;所以把自己的一点点实际经验小结一下&#xff0c;供自己和大家以后参考。 1、选择CardView&#xf…

thinkphp5 ajax搜索+分页

<center> <table > <tr> 水果名称<input type"text" name"f_name" class"f_name"> 水果分类 &…

EventBus学习

EventBus是android 下高效的发布/订阅事件总线机制&#xff0c;可以代替传统的Intent&#xff0c;Handler&#xff0c;BroadCast 或者Fragment&#xff0c;Activity&#xff0c;Service&#xff0c;线程之间传递数据&#xff0c;是一种发布订阅设计模式&#xff08;观察者模式&…

Uediter的引用和取值

页面应用Uediter控件&#xff0c;代码如下&#xff1a; <tr><td align"center" class"xwnr_j"><asp: TextBox ID "txtContent" TextMode "MultiLine" Height "274px" Width "95%" runat"serv…

java程序 构建mycircle类_Java语言程序设计(十九)对象和类的应用实例

1.我们定义一个Circle类并使用该类创建对象&#xff0c;我们创建三个圆对象&#xff0c;1.0&#xff0c;25和125&#xff0c;然后显示这三个圆的半径和面积&#xff0c;将第二个对象的半径改为100&#xff0c;然后显示它的新半径和面积。程序清单如下&#xff1a;package testc…

Django抛错不存在(DoesNotExist)

from django.core.exceptions import ObjectDoesNotExist try:disabledusers.objects.get(sAMAccountNameliu) except ObjectDoesNotExist:print a except modelname.DoesNotExist:转载于:https://www.cnblogs.com/dreamer-fish/p/5835465.html

mysql ddl dql_mysql DDL、DML、DCL、DQL区分

mysql [Structure Query Language] 的组成分4个部分&#xff1a;DDL [Data Mefinition Language] 数据定义语言DML [Data Manipulation Language]  数据操纵语言DCL [Data Control Language] 数据控制语言DQL [Data Query Language ] 数据查询语言1、…

hiho图的联通性(自留)

无向图割边割点算法 而当(u,v)为树边且low[v]>dfn[u]时&#xff0c;表示v节点只能通过该边(u,v)与u连通&#xff0c;那么(u,v)即为割边。 1 void dfs(int u) {2 //记录dfs遍历次序3 static int counter 0; 4 5 //记录节点u的子树数6 int children …

《Git权威指南》笔记2

2019独角兽企业重金招聘Python工程师标准>>> ###Git克隆 Git使用git clone命令实现版本库克隆&#xff0c;主要有如下3种用法&#xff1a; 1&#xff09;git clone <repository> <direcctory> 将repository指向的版本库创建一个克隆岛directory目录。目…

SQL数据库挂起 SQL数据库附加报错 SQL数据库824错误修复

SQL数据库挂起 SQL数据库附加报错 SQL数据库824错误修复 数据类型 MSSQL 2012数据大小 4.5 GB故障检测 附加数据库提示824错误 一般是由于断电非法关机导致页面损坏。客户要求 恢复数据库数据 ERP可直接使用。修复结果 文件传来后 检测发现页面没有及时正常关闭导致SQL认为页不…

查找算法

a. 线性查找&#xff1a;从数据中&#xff0c;第一个元素开始查找&#xff0c;将其与查找的值进行比对&#xff0c;如果相同&#xff0c;就停止查找&#xff0c;如果不相同&#xff0c;则继续下一个元素的比对。直到查找到匹配的值&#xff0c;或者是有数据遍历完毕&#xff0c…

mysql测试数据图表_mysql测试数据表

1.截取至后盾人用于mysql数据测试请在navicat中执行一下命令生成测试数据表/*Navicat Premium Data TransferSource Server : 我的本地连接Source Server Type : MySQLSource Server Version : 50726Source Host : localhost:3306Source Schema : laravelTarget Server Type : …

常用归档压缩命令

1. 打包tar打包表示把一堆文件变成一个tar ####打包工具-f ####指定生成包的名字-c ####创建包-v ####显示创建过程-t ####查看包中内容-x ####解包-r ####添加文件到包中--delete filename ##删除包中指定文件--get filename ##取出包中指定文件cffrcvf 等组合使用2. 压缩…