php 微信商户发红包,退款,订单查询,企业付款到零钱

//注意 需要修改 商户的openid 商户号 商户的支付密钥第222行 商户证书第326到330行 证书需要登陆微信商户后台下载然后放到对应的目录下面
header("Content-type: text/html; charset=utf-8"); 
//引用根目录的连接数据库文件
$filename = dirname($_SERVER['DOCUMENT_ROOT']);
require_once $filename."/fun/config.php";//链接数据库文件
$db = new PDO($dsn, $user, $pwd);
$db->exec("SET CHARACTER SET UTF8"); 
    /**
    * 现金红包接口
    * 2015-11-23
    *作者博客 http://blog.csdn.net/yao978318542
    * 
    * @return
    */

 $type=$_GET['type'];

if($type==1){//红包
$arr['openid']='888888888888';
            $arr['hbname']="提现申请";
            $arr['body']="您的提现申请已经成功";
            $arr['fee']=1;
$comm = new Common_util_pub();          
$re = $comm->sendhongbaoto($arr);
var_dump($re);
}
if($type==4){//企业付款到零钱
$arr['mch_id']=$py['mchid'];
        $arr['wxappid']=$py['appid'];
        $arr['openid']=$user['openid'];
        $arr['partner_trade_no']=get_order();//订单号
        $arr['fee']=1;
$comm = new Common_util_pub();          
$re = $comm->sendhongbaoto($arr);
var_dump($re);
}
if($type==2){//退款
//查询用户的OPENID


                $res = $db->query("SELECT * FROM ai9me_sq_order WHERE order_sn = '".$_GET['ordesid']."'");
                $order = $res->fetchall();

                //print_r($result_arr);;die();
                if($order[0]['id']){
                //查询订单金额
                $arr["out_trade_no"]=$order[0]["order_sn"];
                $arr["out_refund_no"]=date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8)."22";
                $arr['total_fee']=$order[0]['price'];
                $arr['refund_fee']=$_GET['tuiprice']; 

                $comm = new Common_util_pub();          
                $re = $comm->tuikuan($arr);
                if($re['result_code']=='SUCCESS'){
                    mysql_query("UPDATE ai9me_sq_order SET tui_ordersid=".$arr["out_refund_no"].",tui_price=".$_GET['tuiprice']." ,tui_type ='2' WHERE  order_sn = '".$_GET['ordesid']."'");
                    echo "退款成功";
                    die();
                }else{
                    echo $re['err_code_des'];die();
                    }

                }else{
                    echo "订单号错误";die();
                    }
    }
if($type==3){  
$comm = new Common_util_pub();          
$re = $comm->duizhang();
var_dump($re); 
    }




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'] = '88888888';
$data['mch_billno'] = '88888888'.date("Ymd",time()).date("His",time()).rand(1111,9999);
$data['nonce_str'] = self::createNoncestr();
$data['re_openid'] = $arr['openid'];
$data['wxappid'] = 'wxaf3aa765a46cf971';
$data['nick_name'] = $arr['hbname'];
$data['send_name'] = $arr['hbname'];
$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'] = '115.28.83.165';
$data['act_name'] = '测试活动';
$data['remark'] = '备注一下';
$data['wishing'] = $arr['body'];
if(!$data['re_openid']) {   
     $rearr['return_msg']='缺少用户openid';
     return $rearr;
}
$data['sign'] = self::getSign($data);//签名
$xml = self::arrayToXml($data);

$url ="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
$re = self::wxHttpsRequestPem($xml,$url);
$rearr = self::xmlToArray($re);


return  $rearr;
}

public function qiye($arr){
$comm = new Common_util_pub();
$data['mch_appid'] = $arr['wxappid'];
$data['mchid'] = $arr['mch_id'];
$data['nonce_str'] = self::createNoncestr();
$data["partner_trade_no"]=$arr['partner_trade_no'];
$data['openid'] = $arr['openid'];
$data['check_name'] ='NO_CHECK';
$data['re_user_name']="暧昧永远都不是爱";
$data['amount'] = $arr['fee']*100;
$data['desc'] = '积分购买';
$data['spbill_create_ip']='182.254.129.143';
if(!$data['openid']) {   
     $rearr['return_msg']='缺少用户openid';
     return $rearr;
}
$data['sign'] = self::getSign($data);//签名
$xml = self::arrayToXml($data);

$url ="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
$re = self::wxHttpsRequestPem($xml,$url);
$rearr = self::xmlToArray($re);
//print_r($data);
// print_r($rearr);

return  $rearr;
}
public function tuikuan($arr){

$data['mch_id'] = '88888888';//s商户号id
$data['nonce_str'] = self::createNoncestr();//随机字符串
$data['appid'] = 'wxaf3aa765a46cf971';//公众号id
$data['out_trade_no']=$arr['out_trade_no'];//订单号
$data['out_refund_no']=$arr['out_refund_no'];//退款订单号
$data['total_fee'] = $arr['total_fee']*100;//总金额单位为分
$data['refund_fee'] = $arr['refund_fee']*100;//退款金额单位为分
$data['op_user_id'] = 1218828001;//操作员账号默认为商户号
$data['sign'] = self::getSign($data);//签名
$xml = self::arrayToXml($data);

$url ="https://api.mch.weixin.qq.com/secapi/pay/refund";
$re = self::wxHttpsRequestPem($xml,$url);

$rearr = self::xmlToArray($re);


return  $rearr;

    }     
public function duizhang(){

$data['mch_id'] = '88888888';//s商户号id
$data['nonce_str'] = self::createNoncestr();//随机字符串
$data['appid'] = 'wx49b9da97a375b851';//公众号id
$data['bill_type'] = "ALL";//账单类型ALL,返回当日所有订单信息,默认值
$data['bill_date'] = 20151025;//打印那天的订单
$data['sign'] = self::getSign($data);//签名

$xml = self::arrayToXml($data);
//print_r($xml);die();
$url ="https://api.mch.weixin.qq.com/pay/downloadbill";
$re = self::postXmlCurl($xml,$url);
$rearr = self::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=".WxPayConf_pub::KEY();
        //同创蓝天
        //$String = $String."&key=b9ed35e42a2f68a763eceea1a67a0f47";
        //云微客
        $String = $String."&key=hongzhoukeji20150408330681000294";
        //echo "【string2】".$String."</br>";die();
        //签名步骤三:MD5加密
        $String = md5($String);
        //echo "【string3】 ".$String."</br>";die();
        //签名步骤四:所有字符转为大写
        $result_ = strtoupper($String);
        //echo "【result】 ".$result_."</br>";die();
        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;
    }




     /**
     *  作用:以post方式提交xml到对应的接口url
     */
    public function postXmlCurl($xml,$url,$second=30)
    {       
        //初始化curl        
        $ch = curl_init();
        //设置超时
        curl_setopt($ch, CURLOP_TIMEOUT, $second);
        //这里设置代理,如果有的话
        //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
        //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);
        //设置header
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        //要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        //post提交方式
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
        //运行curl
        $data = curl_exec($ch);
        curl_close($ch);
        //返回结果
        if($data)
        {
            curl_close($ch);
            return $data;
        }
        else 
        { 
            $error = curl_errno($ch);
            echo "curl出错,错误码:$error"."<br>"; 
            echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";
            curl_close($ch);
            return false;
        }
    }

     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, getcwd().'/zhuji/apiclient_cert.pem');
        //默认格式为PEM,可以注释
        curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
        curl_setopt($ch,CURLOPT_SSLKEY, getcwd().'/zhuji/apiclient_key.pem');
        curl_setopt($ch,CURLOPT_CAINFO, getcwd().'/zhuji/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;
                }
        }







}

?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值