微信红包接口 微信开发


<?php
header("Content-type: text/html; charset=utf-8");
// exit;

class Common_util_pub
{

/**
* hbname 红包名称 fee 红包金额 /元 body 内容 openid 微信用户id
* @param undefined $arr
*
* @return
*/

public function sendhongbaoto($arr){

//$comm = new Common_util_pub();
$data['mch_id'] = '134564561801';
$data['mch_billno'] = '13646661801'.date("Ymd",time()).date("His",time()).rand(1111,9999);
$data['nonce_str'] = $this->createNoncestr();
$data['re_openid'] = $arr['openid'];
$data['wxappid'] = 'wx56e6ab6****10c0da0';
$data['nick_name'] = $arr['hbname'];
$data['send_name'] = $arr['hbname'];

// $data['total_amount'] = $arr['fee'];
// $data['min_value'] = $arr['fee'];
// $data['max_value'] = $arr['fee'];

$data['total_amount'] = $arr['fee']*100;
$data['min_value'] = $arr['fee']*100;
$data['max_value'] = $arr['fee']*100;
$data['total_num'] = 1;
$data['client_ip'] = $_SERVER['REMOTE_ADDR'];
$data['act_name'] = '新年活动';
$data['remark'] = '新年红包活动';
$data['wishing'] = $arr['body'];
if(!$data['re_openid']) {
$rearr['return_msg']='缺少用户openid';
return $rearr;
}
$data['sign'] = $this->getSign($data);
$xml = $this->arrayToXml($data);
//var_dump($xml);
$url ="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
$re = $this->wxHttpsRequestPem($xml,$url);
$rearr = $this->xmlToArray($re);


return $rearr;
}

function trimString($value)
{
$ret = null;
if (null != $value)
{
$ret = $value;
if (strlen($ret) == 0)
{
$ret = null;
}
}
return $ret;
}

/**
* 作用:产生随机字符串,不长于32位
*/
public function createNoncestr( $length = 32 )
{
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
$str ="";
for ( $i = 0; $i < $length; $i++ ) {
$str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);
}
return $str;
}

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

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

/**
* 作用:array转xml
*/
public function arrayToXml($arr)
{
$xml = "<xml>";
foreach ($arr as $key=>$val)
{
if (is_numeric($val))
{
$xml.="<".$key.">".$val."</".$key.">";

}
else
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
$xml.="</xml>";
return $xml;
}

/**
* 作用:将xml转为array
*/
public function xmlToArray($xml)
{
//将XML转为array
$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $array_data;
}






public function wxHttpsRequestPem( $vars,$url, $second=30,$aHeader=array()){

$ch = curl_init();
//超时时间
curl_setopt($ch,CURLOPT_TIMEOUT,$second);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
//这里设置代理,如果有的话
//curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');
//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

//以下两种方式需选择一种

//第一种方法,cert 与 key 分别属于两个.pem文件
//默认格式为PEM,可以注释
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).'/cert/apiclient_cert.pem');
//默认格式为PEM,可以注释
curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).'/cert/apiclient_key.pem');

curl_setopt($ch,CURLOPT_CAINFO,'PEM');
curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/cert/rootca.pem');

//第二种方式,两个文件合成一个.pem文件
//curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.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;
}
}

}

// $arr['openid']='o4E4WtyhHaT8YVYD0nar-GNj9OX4';
// $arr['hbname']="金成名家";
// $arr['body']="金成名家携全体员工恭祝您新年愉快!阖家欢乐!";
// $arr['fee']=100;
// $comm = new Common_util_pub();
// $re = $comm->sendhongbaoto($arr);
// var_dump($re);

?>

<?php

/**
* ECSHOP 帮助中心
* ============================================================================
* 版权所有 2005-2010 上海商派网络科技有限公司,并保留所有权利。
* 网站地址: http://www.ecshop.com;
* —————————————————————————-
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
* 使用;不允许对程序代码以任何形式任何目的的再发布。
* ============================================================================
* $Author: 68ecshop.com $
* $Id: help.php 17069 2010-03-26 05:28:01Z 68ecshop.com $
*/

define(‘IN_ECS’, true);

require(dirname(__FILE__) . ‘/includes/init.php’);

require(dirname(__FILE__) . ‘/weixin/hongbao.php’);

// if ((DEBUG_MODE & 2) != 2)
// {
// $smarty->caching = true;
// }
/*—————————————————— */
//– PROCESSOR
/*—————————————————— */

/**/
if ($_REQUEST[‘act’] == ” || !isset($_REQUEST[‘act’]))
{

// $cache_id = sprintf(‘%X’, crc32($_REQUEST[‘id’] . ‘-‘ . $_CFG[‘lang’]));

// if (!$smarty->is_cached(‘sns.dwt’, $cache_id))
// {
/*获取文章列表*/

// $filter = array();
// /*获取所有分类*/
// $smarty->assign(‘cat_select’, sns_cat_list(0));

// $result = get_filter();
// /*获取推荐阅读文章*/
// $smarty->assign(‘recommend_article’,get_sns_recommend());

// assign_dynamic(‘sns’);
// }
$load_url=”hongbao.php?act=loaddata&page=0000″;

$smarty->assign(‘load_url’,$load_url);

$smarty->display(‘hongbao_list.dwt’, $cache_id);

}
/*获取首页加载*/
elseif($_REQUEST[‘act’] == ‘loaddata’)
{
date_default_timezone_set(‘PRC’);
$page=intval($_REQUEST[‘page’]);

if($page)
{

$smarty->assign(‘hongbao_list’,get_hongbao_list($page,10));
$smarty->display(‘hongbao_page.dwt’);
}
else
{
echo “”;
}
}
/*获取首页加载*/
elseif($_REQUEST[‘act’] == ‘get’)
{
/*获取用户信息*/
/*判断用户是否登陆*/
// print_r($_SESSION);

// if(strpos($_SERVER[‘HTTP_USER_AGENT’], ‘MicroMessenger’))
// {
// $smarty->assign(‘iswei’, 1); // 判断是否为微信
// echo “微信登陆”;
// }

/* 未登录处理 */
if($user_id=intval($_SESSION[‘user_id’]))
{

date_default_timezone_set(‘PRC’);
$datetime_now=time();
$date=date(‘Y-m-d’);
$hour=intval(date(‘H’));
$count=(intval(date(‘H’))==0?24:intval(date(‘H’)))*3;
$date_day_start=strtotime(‘2017-01-27’);
$date_day_end=strtotime(‘2017-02-11 23:59:59’);
/*判断当前用户是否绑定微信*/
$open_id = $GLOBALS[‘db’]->getOne(“SELECT open_id FROM ” . $GLOBALS[‘ecs’]->table(‘users’) . ” where user_id={$user_id}”);

/*判断当前用户是否解绑*/

$is_bind = $GLOBALS[‘db’]->getAll(“SELECT * FROM ” . $GLOBALS[‘ecs’]->table(‘weixin_user’) . ” where ecuid={$user_id}”);
/*判断是否绑定微信*/
if($open_id!=””&&$is_bind)
{
/*判断当前时间是否开始*/
/*如果小于活动时间提示*/
if($datetime_now<$date_day_start)
{
echo json_encode(array(‘status’=>date(‘Y-m-d H:i:s’,$date_day_start).”点,准时开始”,’url’=>”));
exit;
}
elseif($datetime_now>$date_day_end)
{
//$echo=”现在时间:”.date(‘Y-m-d H:i:s’,$datetime_now).”\r\n”.”开始时间:”.
echo json_encode(array(‘status’=>”活动已结束,看看大家手气”,’url’=>’hongbao.php’));
exit;
}

// $openids=array(
// ‘o4E4WtyhHaT8YVYD0nar-GNj9OX4’,/*李治国*/
// ‘o4E4Wt-WRghRM7XCaI6KL92SroKY’,/*好静*/
// ‘o4E4WtxzB_uIekHlLoZqJPcjTe1A’,/*唐磊*/
// ‘o4E4Wt4bstZPlmp-js7y5cTWN7Dc’/*马总*/

// );
// if(in_array($open_id,$openids))
// {

//if(intval(date(‘H’))

//echo $weixin->text(intval(date(‘H’)))->reply();
// if($hour>=10&&$hour<=23)
// {
/*判断当前时段红包是否领完*/
$hongbao = $GLOBALS[‘db’]->getOne(“SELECT count(*) as count FROM ” . $GLOBALS[‘ecs’]->table(‘weixin_hongbao’) . ” where result_code = ‘SUCCESS’ and `date`='{$date}’ and `hour`='{$hour}'”);
if(intval($hongbao)<$count)
{
/*继续发红包*/
// echo $weixin->text($hongbao.’个红包已发’)->reply();
/*判断当前用户是否领该是端红包*/
$self_hongbao = $GLOBALS[‘db’]->getOne(“SELECT count(*) as count FROM ” . $GLOBALS[‘ecs’]->table(‘weixin_hongbao’) . ” where open_id='{$open_id}’ and `date`='{$date}’ and `hour`='{$hour}'”);
/*未领取该时段红包*/
if(intval($self_hongbao)===0)
{
//$price=”3″;
//$price=floatval(‘1.’.rand(0,51));
$price=1;

$sql = “insert into “.$GLOBALS[‘ecs’]->table(‘weixin_hongbao’).” (`open_id`,`price`,`createtime`,`date`,`hour`)
value (‘{$open_id}’,'{$price}’,'{$datetime_now}’,'{$date}’,'{$hour}’)”;

$GLOBALS[‘db’]->query($sql);
$id=$GLOBALS[‘db’]->insert_id();
/*调用发红包功能*/
if($id)
{
// [“return_code”]=>
// string(7) “SUCCESS”
// [“return_msg”]=>
// string(108) “该用户今日操作次数超过限制,如有需要请登录微信支付商户平台更改API安全配置”
// [“result_code”]=>
// string(4) “FAIL”
// [“err_code”]=>
// string(13) “SENDNUM_LIMIT”
// [“err_code_des”]=>
// string(108) “该用户今日操作次数超过限制,如有需要请登录微信支付商户平台更改API安全配置”
// [“mch_billno”]=>
// string(28) “1307221801201701211523021976”
// [“mch_id”]=>
// string(10) “1307221801”
// [“wxappid”]=>
// string(18) “wx56e6abb9b10c0da0”
// [“re_openid”]=>
// string(28) “o4E4WtyhHaT8YVYD0nar-GNj9OX4”
// [“total_amount”]=>
// string(3) “100”
$arr[‘openid’]=$open_id;
$arr[‘hbname’]=”金成名家”;
$arr[‘body’]=”金成名家携全体员工恭祝您新年愉快!阖家欢乐!”;
$arr[‘fee’]=$price;
$comm = new Common_util_pub();
$re = $comm->sendhongbaoto($arr);
/*红包发放成功*/
if($re[‘result_code’]==”SUCCESS”)
{
echo json_encode(array(“status”=>”恭喜您,领取{$price}元红包,请在公众号领取”,”url”=>””));
/*更新状态*/
$return_code=$re[‘return_code’];
$return_msg=$re[‘return_msg’];
$result_code=$re[‘result_code’];
$mch_billno=$re[‘mch_billno’];
$total_amount=$re[‘total_amount’]/100;
$sql = “update “.$GLOBALS[‘ecs’]->table(‘weixin_hongbao’).” set return_code = ‘$return_code’,return_msg = ‘$return_msg’,result_code = ‘$result_code’,mch_billno = ‘$mch_billno’,total_amount = ‘$total_amount’ where h_id = ‘$id'”;
$GLOBALS[‘db’]->query($sql);

}
else{

echo json_encode(array(‘status’=>’领取失败,确保您已关注微信公众账号,或当日领取次数超限’,’url’=>”));
exit;
}
}
else
{

echo json_encode(array(‘status’=>’差一点,再试一次吧’,’url’=>”));
exit;
}

}
else
{
/* 本时段你已经领过了*/

echo json_encode(array(‘status’=>’本日段你已经领过了,明天再来吧,记得邀请小伙伴加入哦’,’url’=>”));

exit;
}

}
else
{
/*当前时段红包已发完*/

echo json_encode(array(‘status’=>’当前时段红包已发完,下个整点再来吧’,’url’=>”));
exit;

}

// }
// else
// {
// echo $weixin->text(‘请关注活动时间’)->reply();
// exit;
// }

// }
// else{
// echo json_encode(array(‘status’=>’你无权领取’,’url’=>”));
// exit;
// }
}
else
{

echo json_encode(array(‘status’=>’亲,您还没有绑定微信<p><span style=”color:#0000EE;”>点击关注</span>公众号,领取红包吧!’,’url’=>’weixin/qrcode/70.jpg’));
exit;
}

}
else
{
echo json_encode(array(‘status’=>’亲,您还没有登录哟<p><span style=”color:#0000EE;”>点击关注</span>公众号,领取红包吧!<p>’,’url’=>’weixin/qrcode/70.jpg’));
exit;
}

}

function get_hongbao_list($page = 1, $size = 10)
{

$sql = “SELECT u.*,h.h_id,h.price AS price,h.createtime AS get_time “.
‘ FROM ‘ . $GLOBALS[‘ecs’]->table(‘weixin_hongbao’) . ” AS h”.
” LEFT JOIN ” . $GLOBALS[‘ecs’]->table(‘weixin_user’) . ” AS u ON h.open_id=u.fake_id “.
” where h.result_code=’SUCCESS’ “.
” ORDER BY h.createtime DESC”;
$res = $GLOBALS[‘db’]->selectLimit($sql, $size, ($page-1) * $size);
//return $res;

$arr = array();
if ($res)
{
while ($row = $GLOBALS[‘db’]->fetchRow($res))
{
$h_id = $row[‘h_id’];

$arr[$h_id][‘id’] = $h_id;
$arr[$h_id][‘price’] = $row[‘price’];
$arr[$h_id][‘get_time’] = date(‘Y-m-d H:i:s’, $row[‘get_time’]);
$arr[$h_id][‘nickname’] =$row[‘nickname’] ;
$arr[$h_id][‘headimgurl’] =$row[‘headimgurl’] ;

}
}

return $arr;
}
?>

微信发送客服消息 主动推送开发文档

https://mp.weixin.qq.com/wiki/7/12a5a320ae96fecdf0e15cb06123de9f.html

当用户主动发消息给公众号的时候(包括发送信息、点击自定义菜单、订阅事件、扫描二维码事件、支付成功事件、用户维权),微信将会把消息数据推送给开发者,开发者在一段时间内(目前修改为48小时)可以调用客服消息接口,通过POST一个JSON数据包来发送消息给普通用户,在48小时内不限制发送次数。此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务。

接口调用请求说明

http请求方式: POST
https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN

各消息类型所需的JSON数据包如下。

目录

发送文本消息

{
    "touser":"OPENID",
    "msgtype":"text",
    "text":
    {
         "content":"Hello World"
    }
}
参数 是否必须 说明
access_token 调用接口凭证
touser 普通用户openid
msgtype 消息类型,text
content 文本消息内容

使用网页调试工具调试该接口

发送图片消息

{
    "touser":"OPENID",
    "msgtype":"image",
    "image":
    {
      "media_id":"MEDIA_ID"
    }
}
参数 是否必须 说明
access_token 调用接口凭证
touser 普通用户openid
msgtype 消息类型,image
media_id 发送的图片的媒体ID

使用网页调试工具调试该接口

发送语音消息

{
    "touser":"OPENID",
    "msgtype":"voice",
    "voice":
    {
      "media_id":"MEDIA_ID"
    }
}
参数 是否必须 说明
access_token 调用接口凭证
touser 普通用户openid
msgtype 消息类型,voice
media_id 发送的语音的媒体ID

使用网页调试工具调试该接口

发送视频消息

{
    "touser":"OPENID",
    "msgtype":"video",
    "video":
    {
      "media_id":"MEDIA_ID",
      "thumb_media_id":"MEDIA_ID",
      "title":"TITLE",
      "description":"DESCRIPTION"
    }
}
参数 是否必须 说明
access_token 调用接口凭证
touser 普通用户openid
msgtype 消息类型,video
media_id 发送的视频的媒体ID
thumb_media_id 缩略图的媒体ID
title 视频消息的标题
description 视频消息的描述

使用网页调试工具调试该接口

发送音乐消息

{
    "touser":"OPENID",
    "msgtype":"music",
    "music":
    {
      "title":"MUSIC_TITLE",
      "description":"MUSIC_DESCRIPTION",
      "musicurl":"MUSIC_URL",
      "hqmusicurl":"HQ_MUSIC_URL",
      "thumb_media_id":"THUMB_MEDIA_ID" 
    }
}
参数 是否必须 说明
access_token 调用接口凭证
touser 普通用户openid
msgtype 消息类型,music
title 音乐标题
description 音乐描述
musicurl 音乐链接
hqmusicurl 高品质音乐链接,wifi环境优先使用该链接播放音乐
thumb_media_id 缩略图的媒体ID

使用网页调试工具调试该接口

发送图文消息

图文消息条数限制在10条以内,注意,如果图文数超过10,则将会无响应。

{
    "touser":"OPENID",
    "msgtype":"news",
    "news":{
        "articles": [
         {
             "title":"Happy Day",
             "description":"Is Really A Happy Day",
             "url":"URL",
             "picurl":"PIC_URL"
         },
         {
             "title":"Happy Day",
             "description":"Is Really A Happy Day",
             "url":"URL",
             "picurl":"PIC_URL"
         }
         ]
    }
}
参数 是否必须 说明
access_token 调用接口凭证
touser 普通用户openid
msgtype 消息类型,news
title 标题
description 描述
url 点击后跳转的链接
picurl 图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80

使用网页调试工具调试该接口

已解决 请问微信支付V3,在支付成功后通过哪个回调的值更新订单状态呢?


<?php
ini_set('date.timezone','Asia/Shanghai');
// error_reporting(E_ERROR);
error_reporting(0);
require_once "WxPay.Api.php";
require_once 'log.php';
require_once("../../includes/mysql.class.php");
//初始化日志
// $logHandler= new CLogFileHandler("./logs/".date('Y-m-d').'.log');
// $log = Log::Init($logHandler, 15);
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
//禁止引用外部xml实体
$successdata=xmlToArray($xml);
// file_put_contents('log.txt',json_encode($successdata));
function xmlToArray($xml)
{
//将XML转为array
$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $array_data;
}
// function printf_info($data)
// {
// foreach($data as $key=>$value){
// echo "<font color='#f00;'>$key</font> : $value <br/>";
// }
// }
$out_trade_no=$successdata['out_trade_no'];

if(!empty($out_trade_no)){

$input = new WxPayOrderQuery();
$input->SetOut_trade_no($out_trade_no);
$result=WxPayApi::orderQuery($input);
// printf_info($result);
if(array_key_exists("return_code", $result)&& array_key_exists("result_code", $result)&& $result["return_code"] == "SUCCESS"&& $result["result_code"] == "SUCCESS")
{
//file_put_contents('log.txt','支付成功'.$out_trade_no.$pid.$tel.$numbers.$poss);
//支付成功
//改变订单状态
$sql="update pai_deposit set status='1',paytime='".date("Y-m-d H:i:s")."' where out_trade_no='{$out_trade_no}'";
// file_put_contents('log.txt',$sql);
$con=new connection();
$result=$con->Query($sql);
echo "success";
$openid=$successdata['openid'];
$total_fee=$successdata['total_fee']*0.01;
$attach=$successdata['attach'];
$sql="select * from pai_deposit where out_trade_no='{$out_trade_no}'";
$result_deposit=$con->QueryArray($sql);

$sql="select * from paipro where id='".$result_deposit[0]['pid']."'";
$result_pro=$con->QueryArray($sql);

sendmsg($openid,$total_fee,$result_pro[0]['title'],$out_trade_no,$result_deposit[0]['tel']);
exit();
}

echo 'fail';
exit();
}
else
{
//file_put_contents('log.txt','支付失败2'.$out_trade_no);
echo 'fail';
exit();
}
function sendmsg($wxid,$total,$title,$order_id,$tel)
{

$access_token=new_access_token();
$url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_token;

$w_title="付款成功通知";
// $w_url='http://'.$_SERVER['HTTP_HOST']."/mobile/user.php?act=fenxiao1&wxid=".$wxid;
$w_url='';

$rtime=date("Y-m-d H:i:s");
$w_description="订单编号:{$order_id}\r\n保证金:¥{$total}元\r\n商品详情:{$title}\r\n联系电话:{$tel}\r\n付款时间:{$rtime}";
$post_msg = '{
"touser":"'.$wxid.'",
"msgtype":"news",
"news":{
"articles": [
{
"title":"'.$w_title.'",
"description":"'.$w_description.'",
"url":"'.$w_url.'",
"picurl":"'.$w_picurl.'"
}
]
}
}';
$ret_json = curl_grab_page($url, $post_msg);

$ret = json_decode($ret_json);

if($ret->errmsg != 'ok')
{

$access_token = new_access_token();
$url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_token;
$ret_json = curl_grab_page($url, $post_msg);
$ret = json_decode($ret_json);
}

}
function curl_grab_page($url, $data, $proxy = '', $proxystatus = '', $ref_url = '') {
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if ($proxystatus == 'true') {
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
if (!empty($ref_url)) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_REFERER, $ref_url);
}
if (defined('CURLOPT_IPRESOLVE') && defined('CURL_IPRESOLVE_V4')) {
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
}
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
ob_start();
return curl_exec ($ch);
ob_end_clean();
curl_close ($ch);
unset($ch);
}

function new_access_token() {


$appid = 'wx52dc8c34087d';
$appsecret ='d70878f040f08fa55766bf6d';

$time = time();
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
$ret_json = curl_get_contents($url);
$ret = json_decode($ret_json);

return $ret->access_token;


}

function curl_get_contents($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
curl_setopt($ch, CURLOPT_REFERER, _REFERER_);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if (defined('CURLOPT_IPRESOLVE') && defined('CURL_IPRESOLVE_V4')) {
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$r = curl_exec($ch);
curl_close($ch);
return $r;
}
?>

微信退款错误问题 Fatal error: Uncaught exception ‘WxPayException’ with message ‘curl出错,错误码:58’ in C:\wamp\www\API\lib\WxPay.Api.php on line 565 WxPayException: curl出错,错误码:58 in C:\wamp\www\API\lib\WxPay.Api.php on line 565 证书路径正…

微信退款错误问题 Fatal error: Uncaught exception ‘WxPayException’ with message ‘curl出错,错误码:58’ in C:\wamp\www\API\lib\WxPay.Api.php on line 565 WxPayException: curl出错,错误码:58 in C:\wamp\www\API\lib\WxPay.Api.php on line 565 证书路径正…

证书路径必须是“绝对”路径。我之前也是一直报“

curl 错误码 58

”的错误,修改为绝对路径后,demo测试通过了。仅供参考(这几天一直在纠结这个问题,当时百度看到你的问题)。楼主好人。现在要去线上测试了。

 

// const SSLCERT_PATH = ‘../cert/apiclient_cert.pem’;
// const SSLKEY_PATH = ‘../cert/apiclient_key.pem’;
const SSLCERT_PATH =’D:/wwwroot/lss/wwwroot/choujiang/wxpaytest/cert/apiclient_cert.pem’;
const SSLKEY_PATH = ‘D:/wwwroot/lss/wwwroot/choujiang/wxpaytest/cert/apiclient_key.pem’;

微信退款成功 返回数据

退款成功

Array
(
    [appid] => wx52dc8c340******
    [cash_fee] => 1
    [cash_refund_fee] => 1
    [coupon_refund_count] => 0
    [coupon_refund_fee] => 0
    [mch_id] => 13458*****
    [nonce_str] => dZKuE6TryXd3Q8RU
    [out_refund_no] => 13458784012016********
    [out_trade_no] => 201607291620241034
    [refund_channel] => Array
        (
        )

    [refund_fee] => 1
    [refund_id] => 20016020012016080103*******
    [result_code] => SUCCESS
    [return_code] => SUCCESS
    [return_msg] => OK
    [sign] => 6C31BDA419CA8BBE2AAB5E0A2291CE6F
    [total_fee] => 1
    [transaction_id] => 400160200120160729*******
)

appid : wx52dc8c34********
cash_fee : 1
cash_refund_fee : 1
coupon_refund_count : 0
coupon_refund_fee : 0
mch_id : 51348*****
nonce_str : 8HzDxhKjFSIxbWk4
out_refund_no : 134587840120160801111852
out_trade_no : 201607291612328577
refund_channel : Array
refund_fee : 1
refund_id : 20016020012016080103*********
result_code : SUCCESS
return_code : SUCCESS
return_msg : OK
sign : A6F5DCA3AD7D4A0B53D3632B32C53A82
total_fee : 1
transaction_id : 400160200120160729**********

 

重复退款错误信息

Array
(
    [appid] => wx52dc8c********
    [err_code] => TRADE_STATE_ERROR
    [err_code_des] => 订单状态错误
    [mch_id] => 13458*****
    [nonce_str] => 8aoax1wWOi33IPM6
    [result_code] => FAIL
    [return_code] => SUCCESS
    [return_msg] => OK
    [sign] => EF17CB0BBE9C03B2874CAA7F910659EA
)

appid : wx52dc8c3408******
err_code : TRADE_STATE_ERROR
err_code_des : 订单状态错误
mch_id : 13458*****
nonce_str : TOp0uB9aRVn5Xrid
result_code : FAIL
return_code : SUCCESS
return_msg : OK
sign : 779FCC995DAB8137E56AB1FACAC379F2

退款 订单号不存在

Array
(
    [appid] => wx52dc8c3******
    [err_code] => ORDERNOTEXIST
    [err_code_des] => 订单不存在
    [mch_id] => 1345878401
    [nonce_str] => aQOkbyFewn8ydCL6
    [result_code] => FAIL
    [return_code] => SUCCESS
    [return_msg] => OK
    [sign] => B71EC62E4415C9C36C165428CA4D4385
)

3款值得推荐的微信开发开源框架

下面向大家介绍的是微信开发项目里使用的3款基于PHP的开发框架,相信一定对你的开发工作有所帮助。

微信(英文名:wechat)是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序,微信支持跨通信运营商、跨操作系统平台通过网络快速发送免费(需消耗少量网络流量)语音短信、视频、图片和文字,同时,也可以使用通过共享流媒体内容的资料和基于位置的社交插件“摇一摇”、“漂流瓶”、“朋友圈”、”公众平台“、”语音记事本“等服务插件。

微信提供公众平台、朋友圈、消息推送等功能,用户可以通过“摇一摇”、“搜索号码”、“附近的人”、扫二维码方式添加好友和关注公众平台,同时微信将内容分享给好友以及将用户看到的精彩内容分享到微信朋友圈。

截至2013年11月注册用户量已经突破6亿,是亚洲地区最大用户群体的移动即时通讯软件。基于这么庞大的用户群体,针对微信公众平台的营销也随之而来,水涨船高的公众平台的二次开发也愈发的热门起来,今天我们就来具体探讨下几款值得推荐的微信开源框架。

  1. Wechat-PHP-SDK
 
  微信公众平台 PHP 开发包,细化各项接口操作,支持链式调用。
 
  Github托管地址:dodgepudding/wechat-php-sdk

  2. 微信公众平台 PHP SDK
 
  简单的微信公众平台 PHP SDK ,通过调用相应的接口,使你可以轻松地开发微信 App 。
 
  Github托管地址:netputer/wechat-php-sdk

  3. Wechat-php
 
  本微信SDK实现了被动响应的官方 API 已经主动发送消息给订阅用户,主动批量发送消息给订阅用户。
 
  Github托管地址:ligboy/Wechat-php
 
  非常强大的微信公众平台开发框架推荐中有官方和第三方开发者提供的丰富的插件,是免费并且成熟的框架,更多的信息可以点击这里:

 •微擎:http://www.we7.cc/
 •微笑:http://www.sylai.com/
 •weiphp:http://www.weiphp.cn/

一个公司最多可以注册和认证几个微信公众号?

公众平台帐号注册身份证、手机、企业的说明:
1、同一个邮箱只能申请1个公众号。
2、同一个手机号码可登记5次信息。
目前只支持填写中国内地的手机号码(不包含香港、澳门、台湾),其它国家的手机号码暂不支持(临时身份证不支持进行信息登记)。
3、同一个身份证可登记5次信息。
目前只支持通过中国内地年满18周岁的身份证进行信息登记(不包含香港、澳门、台湾)。
4、同一个公司可以注册和认证10个公众号,其他类型组织同一个机构可注册和认证20个公众号。
目前只支持填写中国大陆的营业执照、组织机构代码(不包含香港、澳门、台湾)进行信息登记,其他国家地区暂未开放。
5、身份证上的所有信息清晰可见,照片内容真实有效,不得做任何修改。
6、 支持.jpg .jpeg .bmp .gif .png格式照片,大小不超过2M。

微信开发 php 事件推送 被动推送消息给用户


//$wxid 用户openid

sendmsg($wxid,$total,$title,$order_id,$tel,$name,$hao)

function sendmsg($wxid,$total,$title,$order_id,$tel,$name,$hao)
{

$access_token=new_access_token();
$url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_token;

$w_title="付款成功通知";
// $w_url='http://'.$_SERVER['HTTP_HOST']."/mobile/user.php?act=fenxiao1&wxid=".$wxid;
$w_url='';

$rtime=date("Y-m-d H:i:s");
$w_description="订单编号:{$order_id}\r\n订单金额:¥{$total}元\r\n商品详情:{$title}\r\n联系电话:{$tel}\r\n抽奖号码:{$hao}\r\n付款时间:{$rtime}";
$post_msg = '{
"touser":"'.$wxid.'",
"msgtype":"news",
"news":{
"articles": [
{
"title":"'.$w_title.'",
"description":"'.$w_description.'",
"url":"'.$w_url.'",
"picurl":"'.$w_picurl.'"
}
]
}
}';
$ret_json = curl_grab_page($url, $post_msg);

$ret = json_decode($ret_json);

if($ret->errmsg != 'ok')
{

$access_token = new_access_token();
$url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_token;
$ret_json = curl_grab_page($url, $post_msg);
$ret = json_decode($ret_json);
}

}
function curl_grab_page($url, $data, $proxy = '', $proxystatus = '', $ref_url = '') {
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if ($proxystatus == 'true') {
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
if (!empty($ref_url)) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_REFERER, $ref_url);
}
if (defined('CURLOPT_IPRESOLVE') && defined('CURL_IPRESOLVE_V4')) {
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
}
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
ob_start();
return curl_exec ($ch);
ob_end_clean();
curl_close ($ch);
unset($ch);
}

function new_access_token() {


$appid = '';
$appsecret ='';

$time = time();
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
$ret_json = curl_get_contents($url);
$ret = json_decode($ret_json);

return $ret->access_token;


}

function curl_get_contents($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
curl_setopt($ch, CURLOPT_REFERER, _REFERER_);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if (defined('CURLOPT_IPRESOLVE') && defined('CURL_IPRESOLVE_V4')) {
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$r = curl_exec($ch);
curl_close($ch);
return $r;
}

微信支付错误两个问题的解决:curl出错,错误码:60

如下是运行微信支付测试代码时出错代码:

 

Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroot\weixinpaytest\pay\WxPay.JsApiPay.php on line 99

 

Fatal error: Uncaught exception ‘WxPayException‘ with message ‘curl出错,错误码:60‘ in D:\wwwroot\weixinpaytest\lib\WxPay.Api.php:564 Stack trace: #0 D:\wwwroot\weixinpaytest\lib\WxPay.Api.php(62):

 

WxPayApi::postXmlCurl(‘<xml><appid><![…‘, ‘https://api.mch…‘, false, 6) #1 D:\wwwroot\weixinpaytest\pay\jsapi.php(36):

 

WxPayApi::unifiedOrder(Object(WxPayUnifiedOrder)) #2 {main} thrown in D:\wwwroot\weixinpaytest\lib\WxPay.Api.php on line 564

 

第一个问题,这个问题完全是微信团队的问题,给出的example就是错的:

 

Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroot\weixinpaytest\pay\WxPay.JsApiPay.php on line 99

 

找到WxPay.JsApiPay.php文件的99行,curl_setopt($ch, CURLOP_TIMEOUT, 30);

微信团队example代码里少了一个“T”,正确代码应该是 curl_setopt($ch, CURLOPT_TIMEOUT, 30);

 

这样,这一个问题就解决了。

 

下面说第二个问题:

 

 

Fatal error: Uncaught exception ‘WxPayException‘ with message ‘curl出错,错误码:60‘ in D:\wwwroot\weixinpaytest\lib\WxPay.Api.php:564 Stack trace: #0 D:\wwwroot\weixinpaytest\lib\WxPay.Api.php(62):

 

WxPayApi::postXmlCurl(‘<xml><appid><![…‘, ‘https://api.mch…‘, false, 6) #1 D:\wwwroot\weixinpaytest\pay\jsapi.php(36):

 

WxPayApi::unifiedOrder(Object(WxPayUnifiedOrder)) #2 {main} thrown in D:\wwwroot\weixinpaytest\lib\WxPay.Api.php on line 564

 

 

这个错误通过修改文件WxPay.Api.php 解决,具体如下:

 

第537行

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
to

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//严格校验2

 

这样,这两个问题就解决了!祝你好运!

 

原文:http://www.cnblogs.com/yzycoder/p/4653169.html