php微信公众号开发之现金红包

2021-07-13 18:12:09 浏览数 (1)

本文实例为大家分享了php微信公众号之现金红包的具体代码,供大家参考,具体内容如下

以下有关微信支付中现金红包的开发参考自微信支付开发文档,如下图所示。

现金红包,是微信支付商户平台提供的营销工具之一,上线以来深受广大商户与用户的喜爱。商户可以通过本平台向微信支付用户发放现金红包。用户领取红包后,资金到达用户微信支付零钱账户,和零钱包的其他资金有一样的使用出口;若用户未领取,资金将会在24小时后退回商户的微信支付账户中。

以下为本人用于测试微信支付发红包的代码片段,仅供参考。

/

/

public function weixin_red_packet(){

// 请求参数

// 随机字符串

$data['nonce_str']=$this->get_unique_value();

//签名

$data['sign']="";

//商户号,输入你的商户号

$data['mch_id']="

**";

//商户订单号,可以按要求自己组合28位的商户订单号

$data['mch_billno']=$data['mch_id'].date("ymd")."888888".rand(1000,9999);

//公众帐号appid,输入自己的公众号appid

$data['wxappid']="

*";

//商户名称

$data['send_name']="

";

//用户openid,输入待发红包的用户openid

$data['re_openid']="

*";

//付款金额

$data['total_amount']="100";

//红包发放总人数

$data['total_num']="1";

//红包祝福语

$data['wishing']="

";

//IP地址

$data['client_ip']=$_SERVER['LOCAL_ADDR'];

//活动名称

$data['act_name']="

";

//备注

$data['remark']="没有备注";

//场景ID

// $data['send_id']="PRODUCT_5";

//活动信息

// $data['risk_info']="";

// 生成签名

//对数据数组进行处理

//API密钥,输入自己的appsecret

$appsecret="

*";

$data=array_filter($data);

ksort($data);

$str="";

foreach($data as $k=>$v){

$str.=$k."=".$v."&";

}

$str.="key=".$appsecret;

$data['sign']=strtoupper(MD5($str));

/*

发红包操作:

1.将请求数据转换成xml

2.发送请求

3.将请求结果转换为数组

4.将请求信息和请求结果录入到数据库中

4.判断是否通信成功

5.判断是否转账成功

*/

//发红包接口地址

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

//将请求数据由数组转换成xml

$xml=$this->arraytoxml($data);

//进行请求操作

$res=$this->curl($xml,$url);

//将请求结果由xml转换成数组

$arr=$this->xmltoarray($res);

//请请求信息和请求结果录入到数据库中

// $transfer['partner_trade_no']=$data['partner_trade_no'];

// $transfer['request_data']=serialize($data);

// $transfer['response_data']=se/**【一个开发人员,能懂服务器量好,反之一个服务器维护人员,也应该懂开发】**/rialize($arr);

// if($arr['return_code']=="SUCCESS" && $arr['result_code']=="SUCCESS"){

// $transfer['success']=1;

// $transfer_res['success']=1;

// }else{

// $transfer['success']=0;

// $transfer_res['success']=0;

// $transfer_res['desc']=$arr['return_msg'];

// }

// $transfer['add_time']=time();

// D("weixin_transfer")-&g/

/t;add($transfer);

// 输出请求结果数组

echo "<pre>";

print_r($arr);

exit("weixin_red_packet");

}

// 生成32位唯一随机字符串

private function get_unique_value(){

$str=uniqid(mt_rand(),1);

$str=sha1($str);

return md5($str);

}

// 将数组转换成xml

private function arraytoxml($arr){

$xml="<xml>";

foreach($arr as $k=>$v){

$xml.="&lt;".$k.">".$v."&lt;/".$k.">";

}

$xml.="</xml>";

return $xml;

}

// 将xml转换成数组

private function xmltoarray($xml){

//禁止引用外部xml实体

libxml_disable_entity_loader(true);

$xmlstring=simplexml_load_string($xml,"SimpleXMLElement",LIBXML_NOCDATA);

$arr=json_decode(json_encode($xmlstring),true);

return $arr;

}

//进行curl操作

private function curl($param="",$url) {

$postUrl = $url;

$curlPost = $param;

//初始化curl

$ch = curl_init();

//抓取指定网页

curl_setopt($ch, CURLOPT_URL,$postUrl);

//设置header

curl_setopt($ch, CURLOPT_HEADER, 0);

//要求结果为字符串且输出到屏幕上

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//post提交方式

curl_setopt($ch, CURLOPT_POST, 1);

// 增加 HTTP Header(头)里的字段

curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);

// 终止从服务端进行验证

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

//这个是证书的位置

curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'certapiclient_cert.pem');

//这个也是证书的位置

curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'certapiclient_key.pem');

//运行curl

$data = curl_exec($ch);

//关闭curl

curl_close($ch);

return $data;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

0 人点赞