微信支付現金紅包接口說明及應用實例代碼


本文我將詳細介紹微信紅包開發的接口,商戶調用接口時,通過指定發送對象以及發送金額的方式發放紅包,領取到紅包后,用戶的資金直接進入微信零錢。后面帶有具體調用php實例
 

微信支付現金紅包接口正式開放,只需開通微信支付,即可接入現金紅包。通過現金紅包接口,公眾號開發者可以策划相關運營活動,向用戶發放微信支付現金紅包,更好的達到品牌推廣及回饋用戶的效果。具體能力如下:

1、商戶調用接口時,通過指定發送對象以及發送金額的方式發放紅包,這樣的方式,允許商戶靈活的應用於各種各樣豐富的活動場景

2、領取到紅包后,用戶的資金直接進入微信零錢,避免繁復的領獎流程,帶給用戶微信支付原生的流暢體驗

微信紅包發送規則

1. 發送頻率規則

 ◆ 每分鍾發送紅包數量不得超過1800個;

 ◆ 北京時間0:00-8:00不觸發紅包贈送;(如果以上規則不滿足您的需求,請發郵件至wxhongbao@tencent.com獲取升級指引)

2. 紅包規則

 ◆ 單個紅包金額介於[1.00元,200.00元]之間;

 ◆ 同一個紅包只能發送給一個用戶;(如果以上規則不滿足您的需求,請發郵件至wxhongbao@tencent.com獲取升級指引)

 

商戶側調用紅包接口流程

1. 登錄微信支付商戶平台下載證書以及充值

在調用接口前,請商戶使用微信支付商戶號登錄微信支付商戶平台完成下述工作:

備注:

微信支付商戶平台地址為pay.weixin.qq.com。微信支付商戶號會在商戶申請微信支付成功后,通過開戶郵件發送給您。請不要使用微信公眾平台賬號或者appid登錄。如果您登錄時遇到問題,請聯系微信支付小助手weixinpay@tencent.com

 ◆ 下載證書

商戶調用微信紅包接口時,服務器會進行證書驗證,請在商戶平台下載證書

 

◆ 充值

 發放現金紅包將扣除商戶的可用余額,請注意,可用余額並不是微信支付交易額,需要預先充值,確保可用余額充足。查看可用余額、充值、提現請登錄微信支付商戶平台,進入“資金管理”菜單,進行操作

2. 微信紅包接口調用流程

 ◆ 后台API調用:待進入聯調過程時與開發進行詳細溝通;

 ◆ 告知服務器:告知服務器接收微信紅包的用戶openID,告知服務器該用戶獲得的金額;

 ◆ 從商務號扣款:服務器獲取信息后從對應的商務號扣取對應的金額;

 ◆ 調用失敗:因不符合發送規則,商務號余額不足等原因造成調用失敗,反饋至調用方;

 ◆ 發送成功:以微信紅包公眾賬號發送對應紅包至對應用戶;

 

 

用戶交互流程

調用現金紅包接口,發放成功后,用戶領取紅包流程如下:

步驟(一):收到領取紅包消息,步驟(二):點擊領取消息,拆紅包

 

 

接口詳細說明

1.紅包發放說明

用於企業向微信用戶個人發現金紅包

目前支持向指定微信用戶的openid發放指定金額紅包。(獲取openid參見微信公眾平台開發者文檔: 網頁授權獲取用戶基本信息)

接口參數與用戶領用實際效果對應關系如下:

如需操作請登錄https://pay.weixin.qq.com/

 

 

 

2.接口調用請求說明

請求Url

https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack

是否需要證書

是(證書及使用說明詳見商戶證書)

請求方式

POST

3.請求參數

字段名

字段

必填

示例值

類型

說明

隨機字符串

nonce_str

5K8264ILTKCH16CQ2502SI8ZNMTM67VS

String(32)

隨機字符串,不長於32位

簽名

sign

C380BEC2BFD727A4B6845133519F3AD6

String(32)

詳見簽名生成算法

商戶訂單號

mch_billno

10000098201411111234567890

String(28)

商戶訂單號(每個訂單號必須唯一)

組成: mch_id+yyyymmdd+10位一天內不能重復的數字。

接口根據商戶訂單號支持重入, 如出現超時可再調用。

商戶號

mch_id

10000098

String(32)

微信支付分配的商戶號

子商戶號

sub_mch_id

10000090

String(32)

微信支付分配的子商戶號,受理模式下必填

公眾賬號appid

wxappid

wx8888888888888888

String(32)

商戶appid

提供方名稱

nick_name

天虹百貨

String(32)

提供方名稱

商戶名稱

send_name

天虹百貨

String(32)

紅包發送者名稱

用戶openid

re_openid

oxTWIuGaIt6gTKsQRLau2M0yL16E

String(32)

接受收紅包的用戶

用戶在wxappid下的openid

付款金額

total_amount

1000

int

付款金額,單位分

最小紅包金額

min_value

1000

int

最小紅包金額,單位分

最大紅包金額

max_value

1000

int

最大紅包金額,單位分

( 最小金額等於最大金額: min_value=max_value =total_amount)

紅包發放總人數

total_num

1

int

紅包發放總人數

total_num=1

紅包祝福語

wishing

感謝您參加猜燈謎活動,祝您元宵節快樂!

String(128)

紅包祝福語

Ip地址

client_ip

192.168.0.1

String(15)

調用接口的機器Ip地址

活動名稱

act_name

猜燈謎搶紅包活動

String(32)

活動名稱

備注

remark

猜越多得越多,快來搶!

String(256)

備注信息

商戶logo的url

logo_imgurl

https://wx.gtimg.com/mch/img/ico-logo.png

String(128)

商戶logo的url

分享文案

share_content

快來參加猜燈謎活動

String(256)

分享文案

分享鏈接

share_url

http://www.qq.com

String(128)

分享鏈接

分享的圖片

share_imgurl

https://wx.gtimg.com/mch/img/ico-logo.png

String(128)

分享的圖片url

數據示例:

<xml>

            <sign></sign>

            <mch_billno></mch_billno>

            <mch_id></mch_id>

            <wxappid></wxappid>

            <nick_name></nick_name>

            <send_name></send_name>

            <re_openid></re_openid>

            <total_amount></total_amount>

            <min_value></min_value>

            <max_value></max_value>

            <total_num></total_num>

            <wishing></wishing>

            <client_ip></client_ip>

            <act_name></act_name>

            <act_id></act_id>

            <remark></remark>

            <logo_imgurl></logo_imgurl>

            <share_content></share_content>

            <share_url></share_url>

            <share_imgurl></share_imgurl>

            <nonce_str></nonce_str>

        </xml>

4.返回參數

字段名

變量名

必填

示例值

類型

說明

返回狀態碼

return_code

SUCCESS

String(16)

SUCCESS/FAIL

此字段是通信標識,非交易標識,交易是否成功需要查看result_code來判斷

返回信息

return_msg

簽名失敗

 

String(128)

返回信息,如非空,為錯誤原因

簽名失敗

參數格式校驗錯誤

以下字段在return_code為SUCCESS的時候有返回

簽名

sign

C380BEC2BFD727A4B6845133519F3AD6

String(32)

生成簽名方式詳見簽名生成算法

業務結果

result_code

SUCCESS

String(16)

SUCCESS/FAIL

錯誤代碼

err_code

SYSTEMERROR

String(32)

錯誤碼信息

錯誤代碼描述

err_code_des

系統錯誤

String(128)

結果信息描述

以下字段在return_code 和result_code都為SUCCESS的時候有返回

商戶訂單號

mch_billno

10000098201411111234567890

String(28)

商戶訂單號(每個訂單號必須唯一)

組成: mch_id+yyyymmdd+10位一天內不能重復的數字

商戶號

mch_id

10000098

String(32)

微信支付分配的商戶號

公眾賬號appid

wxappid

wx8888888888888888

String(32)

商戶appid

用戶openid

re_openid

oxTWIuGaIt6gTKsQRLau2M0yL16E

String(32)

接受收紅包的用戶

用戶在wxappid下的openid

付款金額

total_amount

1000

int

付款金額,單位分

發放成功時間

         

微信單號

         

成功示例:

<xml>

<return_code><![CDATA[SUCCESS]]></return_code>

<return_msg><![CDATA[發放成功.]]></return_msg>

<result_code><![CDATA[SUCCESS]]></result_code>

<err_code><![CDATA[0]]></err_code>

<err_code_des><![CDATA[發放成功.]]></err_code_des>

<mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno>

<mch_id>10010404</mch_id>

<wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid>

<re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid>

<total_amount>1</total_amount>

</xml>

失敗示例:

<xml>

                 <return_code><![CDATA[FAIL]]></return_code>

<return_msg><![CDATA[系統繁忙,請稍后再試.]]></return_msg>

<result_code><![CDATA[FAIL]]></result_code>

<err_code><![CDATA[268458547]]></err_code>

<err_code_des><![CDATA[系統繁忙,請稍后再試.]]></err_code_des>

<mch_billno><![CDATA[0010010404201411170000046542]]></mch_billno>

<mch_id>10010404</mch_id>

<wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid>

<re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid>

<total_amount>1</total_amount>

</xml>

 

 

5.錯誤碼

錯誤代碼

描述

解決方案

NOAUTH

無權限

請聯系微信支付開通api權限

PARAM_ERROR

參數錯誤

請查看err_code_des,修改設置錯誤的參數

OPENID_ERROR

Openid錯誤

根據用戶在商家公眾賬號上的openid,獲取用戶在紅包公眾賬號上的openid 錯誤。請核對商戶自身公眾號appid和用戶在此公眾號下的openid。

NOTENOUGH

余額不足

商戶賬號余額不足,請登錄微信支付商戶平台充值

SYSTEMERROR

系統繁忙,請再試。

可用同一商戶單號再次調用,只會發放一個紅包。

TIME _LIMITED

企業紅包的發送時間受限

請北京時間0:00-8:00時間之外觸發紅包贈送

SECOND_OVER_LIMITED

企業紅包的按分鍾發放受限

每分鍾發送紅包數量不得超過1800個;(可聯系微信支付wxhongbao@tencent.com調高額度)

MONEY_LIMIT

紅包金額發放限制

每個紅包金額必須大於1元,小於200元(可聯系微信支付wxhongbao@tencent.com調高額度至4999元)

 

最新微信發紅包接口實例

下面是一個類。使用方法:

$arr['openid']='ojgTTt8oF9VdYcGsJMACHpA-jy1U';
            $arr['hbname']="提現申請";
            $arr['body']="您的提現申請已經成功";
            $arr['fee']=1;
$comm = new Common_util_pub();          
$re = $comm->sendhongbaoto($arr);
var_dump($re);


注意證書位置和 商戶后台設置的key需要修改。

<?php
header("Content-type: text/html; charset=utf-8");
 
 
    /**
    * 現金紅包接口
    * 2015-5-9
    *作者博客 http://shanmao.me
    * 
    * @return
    */
     
 
 
 
 
     
class Common_util_pub
{
     
    /**
* hbname 紅包名稱  fee 紅包金額 /元  body 內容  openid 微信用戶id
* @param undefined $arr
* 
* @return
*/
     
public function sendhongbaoto($arr){
 
//$comm = new Common_util_pub();
$data['mch_id'] = '120005402';
$data['mch_billno'] = '120005402'.date("Ymd",time()).date("His",time()).rand(1111,9999);
$data['nonce_str'] = self::createNoncestr();
$data['re_openid'] = $arr['openid'];
$data['wxappid'] = 'wx8axxxxxbac4905';
$data['nick_name'] = $arr['hbname'];
$data['send_name'] = $arr['hbname'];
$data['total_amount'] = $arr['fee']*100;
$data['min_value'] = $arr['fee']*100;
$data['max_value'] = $arr['fee']*100;
$data['total_num'] = 1;
$data['client_ip'] = $_SERVER['REMOTE_ADDR'];
$data['act_name'] = '測試活動';
$data['remark'] = '備注一下';
$data['wishing'] = $arr['body'];
if(!$data['re_openid']) {   
     $rearr['return_msg']='缺少用戶openid';
     return $rearr;
}
$data['sign'] = self::getSign($data);
$xml = self::arrayToXml($data);
//var_dump($xml);
$url ="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
$re = self::wxHttpsRequestPem($xml,$url);
$rearr = self::xmlToArray($re);
 
 
return  $rearr;
}
     
     
 
    function trimString($value)
    {
        $ret = null;
        if (null != $value) 
        {
            $ret = $value;
            if (strlen($ret) == 0) 
            {
                $ret = null;
            }
        }
        return $ret;
    }
     
    /**
     *  作用:產生隨機字符串,不長於32位
     */
    public function createNoncestr( $length = 32 ) 
    {
        $chars = "abcdefghijklmnopqrstuvwxyz0123456789";  
        $str ="";
        for ( $i = 0; $i < $length; $i++ )  {  
            $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);  
        }  
        return $str;
    }
     
    /**
     *  作用:格式化參數,簽名過程需要使用
     */
    function formatBizQueryParaMap($paraMap, $urlencode)
    {
        $buff = "";
        ksort($paraMap);
        foreach ($paraMap as $k => $v)
        {
            if($urlencode)
            {
               $v = urlencode($v);
            }
            //$buff .= strtolower($k) . "=" . $v . "&";
            $buff .= $k . "=" . $v . "&";
        }
        $reqPar;
        if (strlen($buff) > 0) 
        {
            $reqPar = substr($buff, 0, strlen($buff)-1);
        }
        return $reqPar;
    }
     
    /**
     *  作用:生成簽名
     */
    public function getSign($Obj)
    {
        foreach ($Obj as $k => $v)
        {
            $Parameters[$k] = $v;
        }
        //簽名步驟一:按字典序排序參數
        ksort($Parameters);
        $String = $this->formatBizQueryParaMap($Parameters, false);
        //echo '【string1】'.$String.'</br>';
        //簽名步驟二:在string后加入KEY
        $String = $String."&key="."254554sefg4exxxxxxxxs5cds1"; // 商戶后台設置的key
        //echo "【string2】".$String."</br>";
        //簽名步驟三:MD5加密
        $String = md5($String);
        //echo "【string3】 ".$String."</br>";
        //簽名步驟四:所有字符轉為大寫
        $result_ = strtoupper($String);
        //echo "【result】 ".$result_."</br>";
        return $result_;
    }
     
    /**
     *  作用:array轉xml
     */
public  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; 
    }
     
    /**
     *  作用:將xml轉為array
     */
    public function xmlToArray($xml)
    {       
        //將XML轉為array        
        $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);      
        return $array_data;
    }
 
 
 
     
     
     
     public function wxHttpsRequestPem( $vars,$url, $second=30,$aHeader=array()){
         
                $ch = curl_init();
                //超時時間
                curl_setopt($ch,CURLOPT_TIMEOUT,$second);
                curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
                //這里設置代理,如果有的話
                //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');
                //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
                curl_setopt($ch,CURLOPT_URL,$url);
                curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
                curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
  
                //以下兩種方式需選擇一種
  
                //第一種方法,cert 與 key 分別屬於兩個.pem文件
                //默認格式為PEM,可以注釋
                curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
                curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).'/hongbao/apiclient_cert.pem');
                //默認格式為PEM,可以注釋
                curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
                curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).'/hongbao/apiclient_key.pem');
  
                curl_setopt($ch,CURLOPT_CAINFO,'PEM');
                curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/hongbao/rootca.pem');
  
                //第二種方式,兩個文件合成一個.pem文件
                //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.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;
                }
        }
     
 
}
 
?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM