微信商戶現金紅包api php


微信開發文檔:

現金紅包:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_5

裂變紅包:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=16_5

一、微信紅包SDK
1、請求url:

現金紅包:https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack

裂變紅包:https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack

2、紅包發送規則

1)現金紅包發送規則

1、發送頻率規則

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

◆ 同一個商戶號,每分鍾最多給同一個用戶發送一個紅包;

2、紅包規則

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

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

◆ 紅包發放后72小時未被領取將進行退款

2)裂變紅包發送規則

1、 發送頻率規則

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

◆ 北京時間0:00-8:00不觸發紅包贈送;

(如果以上規則不滿足您的需求,請發郵件至wxhongbao@tencent.com獲取升級指引)

2、紅包規則

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

◆ 裂變組合中的每個紅包平均金額介於[1.00元,200.00元]之間;

◆ 同一組裂變紅包只能發送給一個用戶;

(如果以上規則不滿足您的需求,請發郵件至wxhongbao@tencent.com獲取升級指引)

3、參數說明

1)現金紅包參數:

字段名 字段 必填 示例值 類型 說明
隨機字符串 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 隨機字符串,不長於32位
簽名 sign C380BEC2BFD727A4B6845133519F3AD6 String(32) 詳見簽名生成算法
商戶訂單號 mch_billno 10000098201411111234567890 String(28)

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

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

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

商戶號 mch_id 10000098 String(32) 微信支付分配的商戶號
公眾賬號appid wxappid wx8888888888888888 String(32) 微信分配的公眾賬號ID(企業號corpid即為此appId)。接口傳入的所有appid應該為公眾號的appid(在mp.weixin.qq.com申請的),不能為APP的appid(在open.weixin.qq.com申請的)。
商戶名稱 send_name 天虹百貨 String(32) 紅包發送者名稱
用戶openid re_openid oxTWIuGaIt6gTKsQRLau2M0yL16E String(32)

接受紅包的用戶

用戶在wxappid下的openid

付款金額 total_amount 1000 int 付款金額,單位分
紅包發放總人數 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) 備注信息

數據示例:

<xml>

<sign><![CDATA[E1EE61A91C8E90F299DE6AE075D60A2D]]></sign>

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

<mch_id><![CDATA[888]]></mch_id>

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

<send_name><![CDATA[send_name]]></send_name>

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

<total_amount><![CDATA[200]]></total_amount>

<total_num><![CDATA[1]]></total_num>

<wishing><![CDATA[恭喜發財]]></wishing>

<client_ip><![CDATA[127.0.0.1]]></client_ip>

<act_name><![CDATA[新年紅包]]></act_name>

<remark><![CDATA[新年紅包]]></remark>

<nonce_str><![CDATA[50780e0cca98c8c8e814883e5caa672e]]></nonce_str>

</xml>

返回參數

字段名 變量名 必填 示例值 類型 說明
返回狀態碼 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,接口傳入的所有appid應該為公眾號的appid(在mp.weixin.qq.com申請的),不能為APP的appid(在open.weixin.qq.com申請的)。
用戶openid re_openid oxTWIuGaIt6gTKsQRLau2M0yL16E String(32)

接受收紅包的用戶

用戶在wxappid下的openid

付款金額 total_amount 1000 int 付款金額,單位分
發放成功時間 send_time 20150520102602 int 紅包發送時間
微信單號 send_listid 100000000020150520314766074200 String(32) 紅包訂單的微信單號

成功示例:

<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>

<send_listid>100000000020150520314766074200</send_listid>

<send_time>20150520102602</send_time>

</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>

錯誤碼

錯誤碼 錯誤描述 原因 解決方式
NO_AUTH 發放失敗,此請求可能存在風險,已被微信攔截 用戶賬號異常,被攔截 請提醒用戶檢查自身帳號是否異常。使用常用的活躍的微信號可避免這種情況。
SENDNUM_LIMIT 該用戶今日領取紅包個數超過限制 該用戶今日領取紅包個數超過你在微信支付商戶平台配置的上限 如有需要、請在微信支付商戶平台【api安全】中重新配置 【每日同一用戶領取本商戶紅包不允許超過的個數】。
ILLEGAL_APPID 非法appid,請確認是否為公眾號的appid,不能為APP的appid 錯誤傳入了app的appid 接口傳入的所有appid應該為公眾號的appid(在mp.weixin.qq.com申請的),不能為APP的appid(在open.weixin.qq.com申請的)。
MONEY_LIMIT 紅包金額發放限制 發送紅包金額不再限制范圍內 每個紅包金額必須大於1元,小於200元(可聯系微信支付wxhongbao@tencent.com申請調高額度)
SEND_FAILED 紅包發放失敗,請更換單號再重試 該紅包已經發放失敗 如果需要重新發放,請更換單號再發放
FATAL_ERROR openid和原始單參數不一致 更換了openid,但商戶單號未更新 請商戶檢查代碼實現邏輯
金額和原始單參數不一致 更換了金額,但商戶單號未更新 請商戶檢查代碼實現邏輯 請檢查金額、商戶訂單號是否正確
CA_ERROR CA證書出錯,請登錄微信支付商戶平台下載證書 請求攜帶的證書出錯 到商戶平台下載證書,請求帶上證書后重試
SIGN_ERROR 簽名錯誤 1、沒有使用商戶平台設置的商戶API密鑰進行加密(有可能之前設置過密鑰,后來被修改了,沒有使用新的密鑰進行加密)。
2、加密前沒有按照文檔進行參數排序(可參考文檔)
3、把值為空的參數也進行了簽名。可到(http://mch.weixin.qq.com/wiki/tools/signverify/ )驗證。
4、如果以上3步都沒有問題,把請求串中(post的數據)里面中文都去掉,換成英文,試下,看看是否是編碼問題。(post的數據要求是utf8)
1. 到商戶平台重新設置新的密鑰后重試
2. 檢查請求參數把空格去掉重試
3. 中文不需要進行encode,使用CDATA
4. 按文檔要求生成簽名后再重試
在線簽名驗證工具:http://mch.weixin.qq.com/wiki/tools/signverify/
SYSTEMERROR 請求已受理,請稍后使用原單號查詢發放結果 系統無返回明確發放結果 使用原單號調用接口,查詢發放結果,如果使用新單號調用接口,視為新發放請求
XML_ERROR 輸入xml參數格式錯誤 請求的xml格式錯誤,或者post的數據為空 檢查請求串,確認無誤后重試
FREQ_LIMIT 超過頻率限制,請稍后再試 受頻率限制 請對請求做頻率控制(可聯系微信支付wxhongbao@tencent.com申請調高)
NOTENOUGH 帳號余額不足,請到商戶平台充值后再重試 賬戶余額不足 充值后重試
OPENID_ERROR openid和appid不匹配 openid和appid不匹配 發紅包的openid必須是本appid下的openid
PARAM_ERROR act_name字段必填,並且少於32個字符 請求的act_name字段填寫錯誤 填寫正確的act_name后重試
發放金額、最小金額、最大金額必須相等 請求的金額相關字段填寫錯誤 按文檔要求填寫正確的金額后重試
紅包金額參數錯誤 紅包金額過大 修改金額重試
appid字段必填,最長為32個字符 請求的appid字段填寫錯誤 填寫正確的appid后重試
訂單號字段必填,最長為28個字符 請求的mch_billno字段填寫錯誤 填寫正確的billno后重試
client_ip必須是合法的IP字符串 請求的client_ip填寫不正確 填寫正確的IP后重試
輸入的商戶號有誤 請求的mchid字段非法(或者沒填) 填寫對應的商戶號再重試
找不到對應的商戶號 請求的mchid字段填寫錯誤 填寫正確的mchid字段后重試
nick_name字段必填,並且少於16字符 請求的nick_name字段錯誤 按文檔填寫正確的nick_name后重試
nonce_str字段必填,並且少於32字符 請求的nonce_str字段填寫不正確 按文檔要求填寫正確的nonce_str值后重試
re_openid字段為必填並且少於32個字符 請求的re_openid字段非法 填寫對re_openid后重試
remark字段為必填,並且少於256字符 請求的remark字段填寫錯誤 填寫正確的remark后重試
send_name字段為必填並且少於32字符 請求的send_name字段填寫不正確 按文檔填寫正確的send_name字段后重試
total_num必須為1 total_num字段值不為1 修改total_num值為1后重試
wishing字段為必填,並且少於128個字符 缺少wishing字段 填寫wishing字段再重試
商戶號和wxappid不匹配 商戶號和wxappid不匹配 請修改Mchid或wxappid參數

2)裂變紅包參數

請求參數

字段名 變量名 必填 示例值 類型 描述
隨機字符串 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 隨機字符串,不長於32位
簽名 sign C380BEC2BFD727A4B6845133519F3AD6 String(32) 詳見簽名生成算法
商戶訂單號 mch_billno 10000098201411111234567890 String(28)

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

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

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

商戶號 mch_id 10000098 String(32) 微信支付分配的商戶號
公眾賬號appid wxappid wx8888888888888888 String(32) 微信分配的公眾賬號ID(企業號corpid即為此appId),接口傳入的所有appid應該為公眾號的appid(在mp.weixin.qq.com申請的),不能為APP的appid(在open.weixin.qq.com申請的)。
商戶名稱 send_name 天虹百貨 String(32) 紅包發送者名稱
用戶openid re_openid oxTWIuGaIt6gTKsQRLau2M0yL16E String(32)

接收紅包的種子用戶(首個用戶)

用戶在wxappid下的openid

總金額 total_amount 1000 int 紅包發放總金額,即一組紅包金額總和,包括分享者的紅包和裂變的紅包,單位分
紅包發放總人數 total_num 3 int 紅包發放總人數,即總共有多少人可以領到該組紅包(包括分享者)
紅包金額設置方式 amt_type ALL_RAND String(32)

紅包金額設置方式

ALL_RAND—全部隨機,商戶指定總金額和紅包發放總人數,由微信支付隨機計算出各紅包金額

紅包祝福語 wishing 感謝您參加猜燈謎活動,祝您元宵節快樂! String(128) 紅包祝福語
活動名稱 act_name 猜燈謎搶紅包活動 String(32) 活動名稱
備注 remark 猜越多得越多,快來搶! String(256) 備注信息

數據示例:

<xml> 
   <sign><![CDATA[E1EE61A91C8E90F299DE6AE075D60A2D]]></sign>
   <mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno>
   <mch_id><![CDATA[1000888888]]></mch_id>
   <wxappid><![CDATA[wxcbda96de0b165486]]></wxappid> 
   <send_name><![CDATA[send_name]]></send_name> 
   <re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid> 
   <total_amount><![CDATA[600]]></total_amount> 
   <amt_type><![CDATA[ALL_RAND]]></amt_type> 
   <total_num><![CDATA[3]]></total_num> 
   <wishing><![CDATA[恭喜發財]]></wishing>
   <act_name><![CDATA[新年紅包]]></act_name> 
   <remark><![CDATA[新年紅包]]></remark> 
   <nonce_str><![CDATA[50780e0cca98c8c8e814883e5caa672e]]></nonce_str> 
</xml>

返回參數

字段名 變量名 必填 示例值 類型 描述
返回狀態碼 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) 微信分配的公眾賬號ID(企業號corpid即為此appId)
用戶openid re_openid oxTWIuGaIt6gTKsQRLau2M0yL16E String(32)

接受收紅包的用戶

用戶在wxappid下的openid

總金額 total_amount 1000 int 付款總金額,單位分
發放成功時間 send_time 20150227091010 String(14) 紅包發放成功時間,格式為yyyyMMddHHmmss,如2015年02月27日9點10分10秒表示為20150227091010。
微信單號 send_listid 100000000020150520314766074200 String(32) 微信紅包訂單號

成功示例:

<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>3</total_amount> 

   <send_time><![CDATA[20150227091010]]></send_time>

   <send_listid><![CDATA[1000000000201502270093647546]]></send_listid>

</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>3</total_amount>

</xml>

錯誤碼

錯誤碼 描述 解決方案
NO_AUTH 發放失敗,此請求可能存在風險,已被微信攔截 請提醒用戶檢查自身帳號是否異常。使用常用的活躍的微信號可避免這種情況。
SENDNUM_LIMIT 該用戶今日領取紅包個數超過限制 如有需要、請在微信支付商戶平台【api安全】中重新配置 【每日同一用戶領取本商戶紅包不允許超過的個數】。
CA_ERROR 請求未攜帶證書,或請求攜帶的證書出錯 到商戶平台下載證書,請求帶上證書后重試。
ILLEGAL_APPID 錯誤傳入了app的appid 接口傳入的所有appid應該為公眾號的appid(在mp.weixin.qq.com申請的),不能為APP的appid(在open.weixin.qq.com申請的)。
SIGN_ERROR 商戶簽名錯誤 按文檔要求重新生成簽名后再重試。
FREQ_LIMIT 受頻率限制 請對請求做頻率控制
XML_ERROR 請求的xml格式錯誤,或者post的數據為空 檢查請求串,確認無誤后重試
PARAM_ERROR 參數錯誤 請查看err_code_des,修改設置錯誤的參數
OPENID_ERROR Openid錯誤 根據用戶在商家公眾賬號上的openid,獲取用戶在紅包公眾賬號上的openid 錯誤。請核對商戶自身公眾號appid和用戶在此公眾號下的openid。
NOTENOUGH 余額不足 商戶賬號余額不足,請登錄微信支付商戶平台充值
FATAL_ERROR 重復請求時,參數與原單不一致 使用相同商戶單號進行重復請求時,參數與第一次請求時不一致,請檢查並修改參數后再重試。
SECOND_OVER_LIMITED 企業紅包的按分鍾發放受限 每分鍾發送紅包數量不得超過1800個;(可聯系微信支付wxhongbao@tencent.com調高額度)
DAY_ OVER_LIMITED 企業紅包的按天日發放受限 單個商戶日發送紅包數量不大於10000個;(可聯系微信支付wxhongbao@tencent.com調高額度)
MONEY_LIMIT 紅包金額發放限制 每個紅包金額必須大於1元,小於1000元(可聯系微信支付wxhongbao@tencent.com調高額度至4999元)
SEND_FAILED 紅包發放失敗,請更換單號再重試 原商戶單號已經失敗,如果還要對同一個用戶發放紅包, 需要更換新的商戶單號再試。
SYSTEMERROR 系統繁忙,請再試。 可用同一商戶單號再次調用,只會發放一個紅包

二、代碼實現:

  1 //生成一個長度10,的阿拉伯數字隨機字符串
  2     $rnd_num = array('0','1','2','3','4','5','6','7','8','9');
  3     $rndstr = "";
  4     while(strlen($rndstr)<10){
  5         $rndstr .= $rnd_num[array_rand($rnd_num)];    
  6     }
  7     $mch_id          = "0000000000"; //微信支付分配的商戶號
  8     $mch_billno   = $mch_id.date("Ymd").$rndstr;//訂單ID
  9     $wxappid      = 'wx4b83ddf2e918461e';//公眾賬號appid
 10     $send_name      = 'sendname'; //商戶名稱
 11     $re_openid      = 'or6TQjlK6579JAIo41ZwzNUUQNOw';    //用戶openid
 12     $total_amount = '300'; // 付款金額,單位分
 13     $total_num      = '3';   //紅包發放總人數
 14     $wishing      = 'wishing';   //紅包祝福語                    
 15     $act_name      = '猜燈謎搶紅包活動';   //活動名稱
 16     $remark          = 'remarkcontent';      //備注
 17     $nonce_str      =  md5(rand()); //隨機字符串,不長於32位
 18     $paysecret      = 'as99Ee13KkwsdfuGeNd5ia9orter323A';    //32位
 19 
 20     $redpack_info = array (
 21                         'mch_billno' => $mch_billno,
 22                         'mch_id' => $mch_id,
 23                         'wxappid' => $wxappid,
 24                         'send_name' => $send_name,
 25                         're_openid' => $re_openid,
 26                         'total_amount' => $total_amount,
 27                         'total_num' => $total_num,
 28                         'wishing' => $wishing,
 29                         'act_name' => $act_name,
 30                         'remark' => $remark,
 31                         'nonce_str'=> $nonce_str
 32                     );
 33     sendRedpack($redpack_info);//發送現金紅包
 34     
 35 
 36     /*
 37     現金紅包
 38     */
 39     function sendRedpack($array)
 40     {
 41         if('/'==DIRECTORY_SEPARATOR){
 42             $client_ip=$_SERVER['SERVER_ADDR'];
 43         }else{
 44             $client_ip=@gethostbyname($_SERVER['SERVER_NAME']);
 45         }
 46         $array['client_ip'] = $client_ip;
 47         array_filter($array); // 清空參數為空的數組元素
 48         ksort($array); // 按照參數名ASCII碼從小到大排序
 49                
 50         $stringA = "";
 51         foreach($array as $key => $row){
 52             $stringA .= "&" . $key . '=' . $row;
 53         }
 54         $stringA = substr ( $stringA, 1 );
 55         // 拼接API密鑰:
 56         $stringSignTemp = $stringA."&key=".$paysecret;
 57         $sign = strtoupper(md5($stringSignTemp));//簽名
 58         $textTpl = '<xml>
 59                         <mch_billno><![CDATA[%s]]></mch_billno>
 60                         <mch_id><![CDATA[%s]]></mch_id>
 61                         <wxappid><![CDATA[%s]]></wxappid>
 62                         <send_name><![CDATA[%s]]></send_name>
 63                         <re_openid><![CDATA[%s]]></re_openid>
 64                         <total_amount><![CDATA[%s]]></total_amount>
 65                         <total_num><![CDATA[%s]]></total_num>
 66                         <wishing><![CDATA[%s]]></wishing>
 67                         <client_ip><![CDATA[%s]]></client_ip>
 68                         <act_name><![CDATA[%s]]></act_name>
 69                         <remark><![CDATA[%s]]></remark>
 70                         <nonce_str><![CDATA[%s]]></nonce_str>
 71                         <sign><![CDATA[%s]]></sign>
 72                     </xml>';
 73         $resultStr = sprintf($textTpl, $array['mch_billno'], $array['mch_id'], $array['wxappid'], $array['send_name'],$array['re_openid'],$array['total_amount'],$array['total_num'],$array['wishing'],$array['client_ip'],$array['act_name'],$array['remark'],$array['nonce_str'],$sign);
 74         $url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
 75         echo $this->curl_post_ssl($url, $resultStr);
 76     }
 77     
 78     /*
 79     裂變紅包
 80     */
 81     function sendGroupRedpack($array)
 82     {
 83         $amt_type      = "ALL_RAND";  //紅包金額設置方式 ALL_RAND—全部隨機,商戶指定總金額和紅包發放總人數,由微信支付隨機計算出各紅包金額
 84         $array['amt_type']=$amt_type;
 85         array_filter($array); // 清空參數為空的數組元素
 86         ksort($array); // 按照參數名ASCII碼從小到大排序
 87                
 88         $stringA = "";
 89         foreach($array as $key => $row){
 90             $stringA .= "&" . $key . '=' . $row;
 91         }
 92         $stringA = substr ( $stringA, 1 );
 93         // 拼接API密鑰:
 94         $stringSignTemp = $stringA."&key=".$paysecret;
 95         $sign = strtoupper(md5($stringSignTemp));//簽名
 96         $textTpl = '<xml>
 97                         <sign><![CDATA[%s]]></sign>
 98                         <mch_billno><![CDATA[%s]]></mch_billno>
 99                         <mch_id><![CDATA[%s]]></mch_id>
100                         <wxappid><![CDATA[%s]]></wxappid>
101                         <send_name><![CDATA[%s]]></send_name>
102                         <re_openid><![CDATA[%s]]></re_openid>
103                         <total_amount><![CDATA[%s]]></total_amount>
104                         <amt_type><![CDATA[%s]]></amt_type>
105                         <total_num><![CDATA[%s]]></total_num>
106                         <wishing><![CDATA[%s]]></wishing>
107                         <act_name><![CDATA[%s]]></act_name>
108                         <remark><![CDATA[%s]]></remark>
109                         <nonce_str><![CDATA[%s]]></nonce_str>
110                         </xml>';
111         $resultStr = sprintf($textTpl, $sign, $array['mch_billno'], $array['mch_id'], $array['wxappid'], $array['send_name'],$array['re_openid'],$array['total_amount'],$array['amt_type'],$array['total_num'],$array['wishing'],$array['act_name'],$array['remark'],$array['nonce_str']);
112         $url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack";
113         echo $this->curl_post_ssl($url, $resultStr);
114     }
115 
116     function curl_post_ssl($url, $vars, $second=30,$aHeader=array())
117     {
118         $ch = curl_init();
119         //超時時間
120         curl_setopt($ch,CURLOPT_TIMEOUT,$second);
121         curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
122         //這里設置代理,如果有的話
123         //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');
124         //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
125         curl_setopt($ch,CURLOPT_URL,$url);
126         curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
127         curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
128         
129         //以下兩種方式需選擇一種
130         
131         //第一種方法,cert 與 key 分別屬於兩個.pem文件
132         //默認格式為PEM,可以注釋
133         curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
134         curl_setopt($ch,CURLOPT_SSLCERT,'apiclient_cert.pem');
135         //默認格式為PEM,可以注釋
136         curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
137         curl_setopt($ch,CURLOPT_SSLKEY,'apiclient_key.pem');
138         curl_setopt($ch,CURLOPT_CAINFO,'rootca.pem');
139         
140         //第二種方式,兩個文件合成一個.pem文件
141         //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem');
142      
143         if( count($aHeader) >= 1 ){
144             curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
145         }
146      
147         curl_setopt($ch,CURLOPT_POST, 1);
148         curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
149         $data = curl_exec($ch);
150         if($data){
151             $rsxml = simplexml_load_string($data);
152                 
153             if($rsxml->result_code=='SUCCESS'){echo "業務結果成功<br/>";}    
154             echo "call success";
155             curl_close($ch);
156             return $data;
157         }
158         else { 
159             $error = curl_errno($ch);
160             echo "call faild, errorCode:$error\n"; 
161             curl_close($ch);
162             return false;
163         }
164     }

 

 

 


免責聲明!

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



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