• 微信商户现金红包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
    "; 
    161             curl_close($ch);
    162             return false;
    163         }
    164     }
  • 相关阅读:
    HTTP 与 HTTPS 的区别
    cookie 和session 的区别详解
    IntelliJ远程调试教程
    selenium 自动化测试面试题及答案
    性能测试总结(一)---基础理论篇(转载)
    性能测试总结(二)---测试流程篇(转载)
    性能测试总结(三)--工具选型篇
    eclipse调试的基本意义
    控制反转(IOC)和依赖注入(DI)
    前端框架layui
  • 原文地址:https://www.cnblogs.com/Dong-Ge/p/5526463.html
Copyright © 2020-2023  润新知