微信支付+服務器+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.pswp.cn/news/397748.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397748.shtml
英文地址,請注明出處:http://en.pswp.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. 壓縮…