微信公衆號開發----現金紅包

    以下有關微信支付中現金紅包的開發參考自微信支付開發文檔,網址爲:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1,如下圖所示。


       現金紅包,是微信支付商戶平臺提供的營銷工具之一,上線以來深受廣大商戶與用戶的喜愛。商戶可以通過本平臺向微信支付用戶發放現金紅包。用戶領取紅包後,資金到達用戶微信支付零錢賬戶,和零錢包的其他資金有一樣的使用出口;若用戶未領取,資金將會在24小時後退回商戶的微信支付賬戶中。

   以下爲本人用於測試微信支付發紅包的代碼片段,僅供參考。

/*測試微信企業給個人發紅包*/
public function weixin_red_packet(){
	// 請求參數
	// 隨機字符串
	$data['nonce_str']=$this->get_unique_value();
	//簽名
	$data['sign']="";
	//商戶號,輸入你的商戶號
	$data['mch_id']="**********";
	//商戶訂單號,可以按要求自己組合28位的商戶訂單號
	$data['mch_billno']=$data['mch_id'].date("ymd")."888888".rand(1000,9999);
	//公衆帳號appid,輸入自己的公衆號appid
	$data['wxappid']="*********";
	//商戶名稱
	$data['send_name']="*******";
	//用戶openid,輸入待發紅包的用戶openid
	$data['re_openid']="*********";
	//付款金額
	$data['total_amount']="100";
	//紅包發放總人數
	$data['total_num']="1";
	//紅包祝福語
	$data['wishing']="********";
	//IP地址
	$data['client_ip']=$_SERVER['LOCAL_ADDR'];
	//活動名稱
	$data['act_name']="*******";
	//備註
	$data['remark']="沒有備註";
	//場景ID
	// $data['send_id']="PRODUCT_5";
	//活動信息
	// $data['risk_info']="";
	
	// 生成簽名
	//對數據數組進行處理
	//API密鑰,輸入自己的appsecret
	$appsecret="*********";
	$data=array_filter($data);
	ksort($data);
	$str="";
	foreach($data as $k=>$v){
	    $str.=$k."=".$v."&";
	}
	$str.="key=".$appsecret;
	$data['sign']=strtoupper(MD5($str));


	/*
		發紅包操作:
			1.將請求數據轉換成xml
			2.發送請求
			3.將請求結果轉換爲數組
			4.將請求信息和請求結果錄入到數據庫中
			4.判斷是否通信成功
			5.判斷是否轉賬成功
	 */



	//發紅包接口地址
	$url="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";

	//將請求數據由數組轉換成xml
	$xml=$this->arraytoxml($data);
	//進行請求操作
	$res=$this->curl($xml,$url);
	//將請求結果由xml轉換成數組
	$arr=$this->xmltoarray($res);

	//請請求信息和請求結果錄入到數據庫中
	// $transfer['partner_trade_no']=$data['partner_trade_no'];
	// $transfer['request_data']=serialize($data);    
	// $transfer['response_data']=serialize($arr);
	// if($arr['return_code']=="SUCCESS" && $arr['result_code']=="SUCCESS"){
	// 	$transfer['success']=1;
	// 	$transfer_res['success']=1;
	// }else{
	// 	$transfer['success']=0;
	// 	$transfer_res['success']=0;
	// 	$transfer_res['desc']=$arr['return_msg'];
	// }
	// $transfer['add_time']=time();

	// D("weixin_transfer")->add($transfer);
	// 輸出請求結果數組
	echo "<pre>";
	print_r($arr);
	exit("weixin_red_packet");
}



// 生成32位唯一隨機字符串
private function get_unique_value(){
    $str=uniqid(mt_rand(),1);
    $str=sha1($str);
    return md5($str);
}
// 將數組轉換成xml
private function arraytoxml($arr){
    $xml="<xml>";
    foreach($arr as $k=>$v){
        $xml.="<".$k.">".$v."</".$k.">";
    }
    $xml.="</xml>";
    return $xml;
}
// 將xml轉換成數組
private function xmltoarray($xml){
    //禁止引用外部xml實體
    libxml_disable_entity_loader(true);
    $xmlstring=simplexml_load_string($xml,"SimpleXMLElement",LIBXML_NOCDATA);
    $arr=json_decode(json_encode($xmlstring),true);
    return $arr;
}

//進行curl操作
private function curl($param="",$url) {
    $postUrl = $url;
    $curlPost = $param;
    //初始化curl
    $ch = curl_init();                                     
    //抓取指定網頁
    curl_setopt($ch, CURLOPT_URL,$postUrl);                 
    //設置header
    curl_setopt($ch, CURLOPT_HEADER, 0);                    
    //要求結果爲字符串且輸出到屏幕上
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);            
    //post提交方式
    curl_setopt($ch, CURLOPT_POST, 1);                      
    // 增加 HTTP Header(頭)裏的字段 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);           
    // 終止從服務端進行驗證
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);        
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

    //這個是證書的位置
    curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'\cert\apiclient_cert.pem'); 
    //這個也是證書的位置
    curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'\cert\apiclient_key.pem'); 
    //運行curl
    $data = curl_exec($ch);                                 
    //關閉curl
    curl_close($ch);
 
    return $data;
}


發佈了33 篇原創文章 · 獲贊 10 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章