PHP微信红包API接口

2025-05-29 0 55

首先给大家看一看这个表格:

PHP微信红包API接口

根据微信高级红包接口,开发PHP版本的API接口,现在进行主要代码分析。

红包接口调用请求代码,所有请求参数为必填参数与文档对应:

?

1
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39
class Wxapi {

private $app_id = 'wxXXXXXXXXXXXX'; //公众账号appid,首先申请与之配套的公众账号

private $app_secret = 'XXXXXXXXXXXXXXXXXXXXXXXX';//公众号secret,用户获取用户授权token

private $app_mchid = 'XXXXXXXX';//商户号id

function __construct(){

//do sth here....

}

/**

* 微信支付

* @param string $openid 用户openid

*/

public function pay($re_openid)

{

include_once('WxHongBaoHelper.php');

$commonUtil = new CommonUtil();

$wxHongBaoHelper = new WxHongBaoHelper();

$wxHongBaoHelper->setParameter("nonce_str", $this->great_rand());//随机字符串,丌长于 32 位

$wxHongBaoHelper->setParameter("mch_billno", $this->app_mchid.date('YmdHis').rand(1000, 9999));//订单号

$wxHongBaoHelper->setParameter("mch_id", $this->app_mchid);//商户号

$wxHongBaoHelper->setParameter("wxappid", $this->app_id);

$wxHongBaoHelper->setParameter("nick_name", '红包');//提供方名称

$wxHongBaoHelper->setParameter("send_name", '红包');//红包发送者名称

$wxHongBaoHelper->setParameter("re_openid", $re_openid);//相对于医脉互通的openid

$wxHongBaoHelper->setParameter("total_amount", 100);//付款金额,单位分

$wxHongBaoHelper->setParameter("min_value", 100);//最小红包金额,单位分

$wxHongBaoHelper->setParameter("max_value", 100);//最大红包金额,单位分

$wxHongBaoHelper->setParameter("total_num", 1);//红包収放总人数

$wxHongBaoHelper->setParameter("wishing", '感谢您参与红包派发活动,祝您新年快乐!');//红包祝福诧

$wxHongBaoHelper->setParameter("client_ip", '127.0.0.1');//调用接口的机器 Ip 地址

$wxHongBaoHelper->setParameter("act_name", '红包活动');//活劢名称

$wxHongBaoHelper->setParameter("remark", '快来抢!');//备注信息

$postXml = $wxHongBaoHelper->create_hongbao_xml();

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

$responseXml = $wxHongBaoHelper->curl_post_ssl($url, $postXml);

//用作结果调试输出

//echo htmlentities($responseXml,ENT_COMPAT,'UTF-8');

$responseObj = simplexml_load_string($responseXml, 'SimpleXMLElement', LIBXML_NOCDATA);

return $responseObj->return_code;

}

获取随机字符串方法:

?

1
2

3

4

5

6

7

8

9

10

11
/**

* 生成随机数

*/

public function great_rand(){

$str = '1234567890abcdefghijklmnopqrstuvwxyz';

for($i=0;$i<30;$i++){

$j=rand(0,35);

$t1 .= $str[$j];

}

return $t1;

}

签名算法:

?

1
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35
/**

例如:

appid: wxd111665abv58f4f

mch_id: 10000100

device_info: 1000

Body: test

nonce_str: ibuaiVcKdpRxkhJA

第一步:对参数按照 key=value 的格式,并按照参数名 ASCII 字典序排序如下:

stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_i

d=10000100&nonce_str=ibuaiVcKdpRxkhJA";

第二步:拼接支付密钥:

stringSignTemp="stringA&key=192006250b4c09247ec02edce69f6a2d"

sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A

9CF3B7"

*/

protected function get_sign(){

define('PARTNERKEY',"QSRXXXXXXXXXXXXXXXXXXXXX");

try {

if (null == PARTNERKEY || "" == PARTNERKEY ) {

throw new SDKRuntimeException("密钥不能为空!" . "<br>");

}

if($this->check_sign_parameters() == false) { //检查生成签名参数

throw new SDKRuntimeException("生成签名参数缺失!" . "<br>");

}

$commonUtil = new CommonUtil();

ksort($this->parameters);

$unSignParaString = $commonUtil->formatQueryParaMap($this->parameters, false);

$md5SignUtil = new MD5SignUtil();

return $md5SignUtil->sign($unSignParaString,$commonUtil->trimString(PARTNERKEY));

}catch (SDKRuntimeException $e)

{

die($e->errorMessage());

}

}

CURL请求以及发送证书:

?

1
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32
function curl_post_ssl($url, $vars, $second=30,$aHeader=array())

{

$ch = curl_init();

//超时时间

curl_setopt($ch,CURLOPT_TIMEOUT,$second);

curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);

//这里设置代理,如果有的话

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

//cert 与 key 分别属于两个.pem文件

//请确保您的libcurl版本是否支持双向认证,版本高于7.20.1

curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).DIRECTORY_SEPARATOR.'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_cert.pem');

curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).DIRECTORY_SEPARATOR.'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_key.pem');

curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR.'zhengshu'.DIRECTORY_SEPARATOR.'rootca.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;

}

}

入口文件:

?

1
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
@require "pay.php";

//获取用户信息

$get = $_GET['param'];

$code = $_GET['code'];

//判断code是否存在

if($get=='access_token' && !empty($code)){

$param['param'] = 'access_token';

$param['code'] = $code;

$packet = new Packet();

//获取用户openid信息

$userinfo = $packet->_route('userinfo',$param);

if(empty($userinfo['openid'])){

exit("NOAUTH");

}

//调取支付方法

$packet->_route('wxpacket',array('openid'=>$userinfo['openid']));

}else{

$packet->_route('userinfo');

}

以上就是关于PHP微信红包API接口的详细代码,分享给大家,希望对大家的学习有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP微信红包API接口 https://www.kuaiidc.com/99813.html

相关文章

发表评论
暂无评论