這篇文章主要介紹了PHP開發的現金紅包功能,結合執行個體形式較為詳細的分析了php使用介面實現現金紅包功能的相關步驟與操作技巧,需要的朋友可以參考下
具體如下:
商家後台-現金紅包開發
sdk
<?phpclass wxPay { //配置參數資訊 const SHANGHUHAO = "1430998xxx";//商戶號 const PARTNERKEY = "leFyTOXWzUEXxfp47WOu5d9xxxxxx"; //api,商戶後台 //核心支付函數,參數:請求地址和參數 function pay($url,$obj) { $obj['nonce_str'] = $this->create_noncestr(); //建立隨機字串 $stringA = $this->create_qianming($obj,false); //建立簽名 $stringSignTemp = $stringA."&key=leFyTOXWzUEXxfp47WOu5xxxxxx"; //簽名後加api $sign = strtoupper(md5($stringSignTemp)); //簽名加密並大寫 $obj['sign'] = $sign; //將簽名傳入數組 $postXml = $this->arrayToXml($obj); //將參數轉為xml格式 var_dump($postXml); $responseXml = $this->curl_post_ssl($url,$postXml); //提交請求 var_dump($responseXml); return $responseXml; } //產生簽名,參數:產生簽名的參數和是否編碼 function create_qianming($arr,$urlencode) { $buff = ""; ksort($arr); //對傳進來的數組參數裡面的內容按照字母順序排序,a在前面,z在最後(字典序) foreach ($arr as $k=>$v) { if(null!=$v && "null" != $v && "sign" != $k) { //簽名不要轉碼 if ($urlencode) { $v = urlencode($v); } $buff.=$k."=".$v."&"; } } if (strlen($buff)>0) { $reqPar = substr($buff,0,strlen($buff)-1); //去掉末尾符號“&” } return $reqPar; } //產生隨機字串,預設32位 function create_noncestr($length=32) { //建立隨機字元 $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; $str = ""; for($i=0;$i<$length;$i++) { $str.=substr($chars, mt_rand(0,strlen($chars)-1),1); } return $str; } //數組轉xml 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; } //post請求網站,需要認證 function curl_post_ssl($url, $vars, $second=30,$aHeader=array()) { $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); //cert 與 key 分別屬於兩個.pem檔案 //請確保您的libcurl版本是否支援雙向認證,版本高於7.20.1 curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).DIRECTORY_SEPARATOR. 'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_cert.pem'); curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).DIRECTORY_SEPARATOR. 'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_key.pem'); curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR. 'zhengshu'.DIRECTORY_SEPARATOR.'rootca.pem'); if( count($aHeader) >= 1 ){ curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader); } curl_setopt($ch,CURLOPT_POST, 1); curl_setopt($ch,CURLOPT_POSTFIELDS,$vars); $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; } }}
認證檔案:
請在商戶後台-API安全下載,PHP請使用php的認證檔案
紅包調用測試檔案:
<?phprequire 'wxpay.class.php';<br><br>//數組參數$money = 100; //最低1元,單位分$sender = "晨緣房產";$obj2 = array();$obj2['wxappid'] = ""; //appid$obj2['mch_id'] = ""; //商戶id$obj2['mch_billno'] = "商戶id".date('YmdHis').rand(1000,9999); //組合成28位,根據官方開發文檔,可以自行設定$obj2['client_ip'] = $_SERVER['REMOTE_ADDR'];$obj2['re_openid'] = "oUxO6v26wdyMHThD9kfDW6NB_xbE"; //接收紅包openid$obj2['total_amount'] = $money;$obj2['min_value'] = $money;$obj2['max_value'] = $money;$obj2['total_num'] = 1;$obj2['nick_name'] = $sender;$obj2['send_name'] = $sender;$obj2['wishing'] = "恭喜發財";$obj2['act_name'] = $sender."紅包";$obj2['remark'] = $sender."紅包";$url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";$wxpay = new wxPay();$res = $wxpay->pay($url, $obj2);var_dump($res);
相關推薦:
PHP實現公眾號開發之紅包的方法
JS實現紅包隨機演算法(附代碼)
PHP用拋物線的模型實現紅包產生演算法的程式源碼