php实现微信发红包功能

PHP 实现微信发红包功能的攻略如下:

PHP 实现微信发红包功能的攻略如下:

步骤一:获取微信商户平台的证书和密钥

要实现微信发红包功能,首先需要在微信商户平台上注册账号,并获取到对应的 certkey 文件,用于后续的 API 调用。具体获取过程可参考微信支付官方文档。

步骤二:构建发红包接口的 XML 数据

发红包需要构建特殊格式的 XML 数据,可参考下面的示例代码:

<xml>
  <nonce_str>随机字符串</nonce_str>
  <mch_billno>商户订单号</mch_billno>
  <mch_id>商户号</mch_id>
  <wxappid>公众号appid</wxappid>
  <send_name>商户名称</send_name>
  <re_openid>接收红包的用户openid</re_openid>
  <total_amount>红包金额(单位为分)</total_amount>
  <total_num>红包发放人数</total_num>
  <wishing>红包祝福语</wishing>
  <client_ip>调用接口的机器 IP</client_ip>
  <act_name>活动名称</act_name>
  <remark>备注信息</remark>
  <scene_id>发放红包使用场景(非必填)</scene_id>
  <risk_info>防刷参数(非必填)</risk_info>
  <consume_mch_id>资金授权商户号(非必填)</consume_mch_id>
  <sign>签名</sign>
</xml>

其中,红包金额需要转换为单位为分的整数,XML 数据中 <sign> 标签的签名是必须的,请根据微信官方文档对数据进行签名。

步骤三:调用微信企业付款接口

在 PHP 中调用微信企业付款接口需要使用 cURL 库,示例代码如下:

$url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSLCERT, '证书路径');
curl_setopt($ch, CURLOPT_SSLKEY, '密钥路径');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);

$response = curl_exec($ch);
curl_close($ch);

其中,$url 为接口地址,$xml_data 为构建好的 XML 数据,CURLOPT_SSLCERTCURLOPT_SSLKEY 分别为证书和密钥的路径。

以下是使用 PHP 实现微信发红包功能的示例代码:

<?php
// 构建 XML 数据
$xml_data = '<xml>
  <nonce_str>'.md5(mt_rand()).'</nonce_str>
  <mch_billno>'.date('YmdHis').mt_rand(1000, 9999).'</mch_billno>
  <mch_id>[商户号]</mch_id>
  <wxappid>[公众号appid]</wxappid>
  <send_name>微信支付</send_name>
  <re_openid>[接收红包的用户openid]</re_openid>
  <total_amount>100</total_amount>
  <total_num>1</total_num>
  <wishing>恭喜发财,大吉大利</wishing>
  <client_ip>'.get_real_ip().'</client_ip>
  <act_name>新春大红包</act_name>
  <remark>新春快乐</remark>
  <sign>[签名]</sign>
</xml>';

// 调用微信企业付款接口
$url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSLCERT, '[证书路径]');
curl_setopt($ch, CURLOPT_SSLKEY, '[密钥路径]');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);

$response = curl_exec($ch);
curl_close($ch);

// 输出 API 返回结果
echo $response;

// 获取客户端 IP 地址
function get_real_ip() {
  if (@$_SERVER['HTTP_X_FORWARDED_FOR']) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  } elseif (@$_SERVER['HTTP_CLIENT_IP']) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
  } else {
    $ip = $_SERVER['REMOTE_ADDR'];
  }
  return $ip;
}
?>

以上示例代码中,随机生成了一个商户订单号,红包金额为 1 元,红包发放人数为 1,其它参数均为固定值。示例中的签名值和证书、密钥路径需要替换为实际的值。

第二个示例是发送裂变红包,整体实现流程类似,不同之处在于 XML 数据中增加了 num_wxbus_get 和 amt_type 两个参数,并且红包发放人数必须在 3 - 20 人之间。

// 构建 XML 数据
$xml_data = '<xml>
  <nonce_str>'.md5(mt_rand()).'</nonce_str>
  <mch_billno>'.date('YmdHis').mt_rand(1000, 9999).'</mch_billno>
  <mch_id>[商户号]</mch_id>
  <wxappid>[公众号appid]</wxappid>
  <send_name>微信支付</send_name>
  <re_openid>[接收红包的用户openid]</re_openid>
  <total_amount>200</total_amount>
  <total_num>4</total_num>
  <amt_type>ALL_RAND</amt_type>
  <wishing>恭喜发财,大吉大利</wishing>
  <act_name>新春大红包</act_name>
  <remark>新春快乐</remark>
  <scene_id>BUSINESS_ACT</scene_id>
  <num_wxbus_get>3</num_wxbus_get>
  <client_ip>'.get_real_ip().'</client_ip>
  <sign>[签名]</sign>
</xml>';

// 调用微信企业付款接口
$url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack';
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSLCERT, '[证书路径]');
curl_setopt($ch, CURLOPT_SSLKEY, '[密钥路径]');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);

$response = curl_exec($ch);
curl_close($ch);

// 输出 API 返回结果
echo $response;

本文标题为:php实现微信发红包功能

基础教程推荐