微信公众平台发红包接口

来源:互联网 发布:淘宝客服主管面试问题 编辑:程序博客网 时间:2024/04/30 02:48

微信公众平台发红包功能与企业付款类似,首先微信商户里是需要有余额的。

请求的地址是:https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack

      官方文档:https://pay.weixin.qq.com/wiki/doc/api/cash_coupon.php?chapter=13_5

      测试代码如下,有需要的朋友可以自己根据的需求改一下,主要分一下几个步骤:

充值、网页授权获取openid、获取企业付款需要的信息、发出企业付款请求)。

  1、充值

在微信商户平台中:资金管理->充值(由于企业付款将使用商户的可用余额进行支付,需确保可用余额充足。查看可用余额、充值、提现请登录商户平台“资金管理”进行操作。https://pay.weixin.qq.com/ 注意:商户的可用余额与商户微信支付收款资金并非同一账户,需要单独充值。

2、网页授权

通过网页授权获取用户的openid(企业向微信用户个人付款 目前支持向指定微信用户的openid付款。

具体获取方法可查官方api或http://blog.csdn.net/u010533511/article/details/48085585 。

3、获取企业付款需要的信息

$mch_appid=$appid;
$mchid='100
00005';//商户号
$nonce_str='fhb'.rand(100000, 999999);//随机数
$partner_trade_no="10029435".rand(1000000000, 9999999999);//商户订单号
$openid=$openids;//用户唯一标识
$wishing="感谢您参加猜灯谜活动,祝您元宵节快乐!";//红包祝福语
$act_name="猜灯谜抢红包活动";//活动名称
$sremark="猜越多得越多,快来抢!";//备注
$total_num="1";//
$total_amount="100";//
$send_name="
测试名称";//
$spbill_create_ip=$_SERVER["REMOTE_ADDR"];//请求ip

//封装数组
$dataArr=array();
$dataArr['mch_billno']=$partner_trade_no;//商户订单号
$dataArr['mch_id']=$mchid;//商户号
$dataArr['wxappid']=$mch_appid;//公众号appid
$dataArr['send_name']=$send_name;//红包发送者名称
$dataArr['re_openid']=$openid;//用户相对于公众号的唯一ID
$dataArr['total_amount']=$total_amount;//发放总金额1-200元之间
$dataArr['total_num']=$total_num;//发放数量
$dataArr['wishing']=$wishing;//祝福语
$dataArr['client_ip']=$spbill_create_ip;//客户端ip
$dataArr['act_name']=$act_name;//活动名称
$dataArr['remark']=$sremark;//备注
$dataArr['nonce_str']=$nonce_str;//随机数
$sign=getSign($dataArr);
echo "-----<br/>签名:".$sign."<br/>*****";//die;

$data="<xml>
<sign><![CDATA[".$sign."]]></sign>
<mch_billno><![CDATA[".$partner_trade_no."]]></mch_billno>
<mch_id><![CDATA[".$mchid."]]></mch_id>
<wxappid><![CDATA[".$mch_appid."]]></wxappid>
<send_name><![CDATA[".$send_name."]]></send_name>
<re_openid><![CDATA[".$openid."]]></re_openid>
<total_amount><![CDATA[".$total_amount."]]></total_amount>
<total_num><![CDATA[".$total_num."]]></total_num>
<wishing><![CDATA[".$wishing."]]></wishing>
<client_ip><![CDATA[".$spbill_create_ip."]]></client_ip>
<act_name><![CDATA[".$act_name."]]></act_name>
<remark><![CDATA[".$sremark."]]></remark>
<nonce_str><![CDATA[".$nonce_str."]]></nonce_str>
</xml>";

4、发出企业付款请求

$ch = curl_init ();
//红包链接
$MENU_URL="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
curl_setopt ( $ch, CURLOPT_URL, $MENU_URL );
curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST" );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );


$zs1="E:/new999zcmf/wxzftou/apiclient_cert.pem";
$zs2="E:/new999zcmf/wxzftou/apiclient_key.pem";
curl_setopt($ch,CURLOPT_SSLCERT,$zs1);
curl_setopt($ch,CURLOPT_SSLKEY,$zs2);
// curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01;
// Windows NT 5.0)');
curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt ( $ch, CURLOPT_AUTOREFERER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );


$info = curl_exec ( $ch );


if (curl_errno ( $ch )) {
echo 'Errno' . curl_error ( $ch );
}


curl_close ( $ch );
echo "-----<br/>请求返回值:";
var_dump($info);
echo "<br/>*****";die;

根据返回值,做具体处理。



------------------------getSign()方法如下----------------------



/**
 * 作用:生成签名
 */
function getSign($Obj)
{
var_dump($Obj);//die;
foreach ($Obj as $k => $v)
{
$Parameters[$k] = $v;
}
//签名步骤一:按字典序排序参数
ksort($Parameters);
$String = formatBizQueryParaMap($Parameters, false);//方法如下
//echo '【string1】'.$String.'</br>';
//签名步骤二:在string后加入KEY
$String = $String."&key=xxxxxcab639xxxxxxxxbd89345ooi";
//echo "【string2】".$String."</br>";
//签名步骤三:MD5加密
$String = md5($String);
//echo "【string3】 ".$String."</br>";
//签名步骤四:所有字符转为大写
$result_ = strtoupper($String);
//echo "【result】 ".$result_."</br>";
return $result_;
}


/**
 * 作用:格式化参数,签名过程需要使用
 */
function formatBizQueryParaMap($paraMap, $urlencode)
{
var_dump($paraMap);//die;
$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);
}
var_dump($reqPar);//die;
return $reqPar;
}



示例demo:http://download.csdn.net/detail/u010533511/9115521


0 0
原创粉丝点击