微信支付-企业付款到个人零钱-个人提现功能-思路

本文分享微信支付-企业付款到个人零钱-个人提现功能的思路:图如下:

1.基本配置

//公众账号appid
     $data["mch_appid"] = 'appid';
//商户号    
     $data["mchid"]  = '';
//随机字符串   
     $data["nonce_str"] = 'suiji'.mt_rand(100,999); 
//商户订单号       
 $data["partner_trade_no"]=date('YmdHis').mt_rand(1000,9999);  
//金额 用户输入的提现金额需要乘以100             
    $data["amount"] = $money;     
//企业付款描述
    $data["desc"]  = '企业付款到个人零钱'; 
//用户openid                   
   $data["openid"]   = $openid;  
//不检验用户姓名                
   $data["check_name"]   = 'NO_CHECK';  
//获取IP             
   $data['spbill_create_ip']=$_SERVER['SERVER_ADDR'];   
//商户密钥  
    $data['key']='';
//商户证书  商户平台的API安全证书下载
    $data['apiclient_cert.pem']
    $data['apiclient_key.pem']  

2.PHP代码

/**
**开始支付
/
 public function userpay(){
        $money = ‘用户输入提现金额’;
        $info['money'] = ‘用户余额’;
        if ($this->openid && $money){
            if ($money>$info['money'] ){
                echo json_encode([
                    'status' => 1,
                    'message' => '余额不足,不能提现!',
                    'code'=>'余额不足,不能提现!'
                ]);
            }elseif ($money<1){
                echo json_encode([
                    'status' => 2,
                    'message' => '提现金额不能小于1元',
                    'code'=>'提现金额太低'
                ]);
            }else{
       $openid = $this->openid;
       $trade_no = date('YmdHis').mt_rand(1000,9999);
       $res = $this->pay($openid,$trade_no,$money*100,'微信提现');

       //结果打印
     if($res['result_code']=="SUCCESS"){

                   echo json_encode([
                        'status' => 3,
                        'message' => '提现成功!',
                    ]);
                }elseif ($res['err_code']=="SENDNUM_LIMIT"){
                    echo json_encode([
                        'status' => 4,
                        'message' => '提现失败!',
                        'code'=>'每日仅能提现一次',
                    ]);
                }else{
                    echo json_encode([
                        'status' => 5,
                        'message' => '提现失败!',
                        'code'=>$res['err_code'],
                    ]);
                }
            }
        }else{
            echo json_encode([
                'status' => 5,
                'message' => '未检测到您当前微信账号~',

            ]);
        }
  }

3、支付方法

/**
*支付方法
/
public function pay($openid,$trade_no,$money,$desc){
   $params["mch_appid"]='';       
   $params["mchid"] = '';   
   $params["nonce_str"]= 'suiji'.mt_rand(100,999);   
   $params["partner_trade_no"]  = $trade_no;           
   $params["amount"]= $money;          
   $params["desc"]= $desc;         
   $params["openid"]= $openid;          
   $params["check_name"]= 'NO_CHECK';      
   $params['spbill_create_ip'] = $_SERVER['SERVER_ADDR'];   

   //生成签名
    $str = 'amount='.$params["amount"].'&check_name='.$params["check_name"].'&desc='.$params["desc"].'&mch_appid='.$params["mch_appid"].'&mchid='.$params["mchid"].'&nonce_str='.$params["nonce_str"].'&openid='.$params["openid"].'&partner_trade_no='.$params["partner_trade_no"].'&spbill_create_ip='.$params['spbill_create_ip'].'&key=商户密钥';

 //md5加密 转换成大写
   $sign = strtoupper(md5($str));
 //生成签名
   $params['sign'] = $sign;

 //构造XML数据
   $xmldata = $this->array_to_xml($params);  //数组转XML
 $url='https://api.mch.weixin.qq.com/mmpaymkttransfers/prom       otion/transfers';

  //发送post请求
  $res = $this->curl_post_ssl($url, $xmldata); //curl请求 
  if(!$res){
    return array('status'=>1, 
                 'msg'=>"服务器连接失败" );
    }

  //付款结果分析
    $content = $this->xml_to_array($res);  //xml转数组
    return $content;
    }
/**
* curl请求
/
public function curl_post_ssl($url, $xmldata,           $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);

 //默认格式为PEM,可以注释
   curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
//绝对地址可使用 dirname(__DIR__)打印,如果不是绝对地址会报 58 错误
    curl_setopt($ch,CURLOPT_SSLCERT,' 绝对地址/apiclient_cert.pem');
    curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
    curl_setopt($ch,CURLOPT_SSLKEY,'绝对地址/apiclient_key.pem');
   if( count($aHeader) >= 1 ){
            curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
        }
  curl_setopt($ch,CURLOPT_POST, 1);
  curl_setopt($ch,CURLOPT_POSTFIELDS,$xmldata);
  $data = curl_exec($ch);
  if($data){
    curl_close($ch);
    return $data;
        }
  else {
   $error = curl_errno($ch);
   echo "call faild, errorCode:$error\n";
   die();
   curl_close($ch);
   return false;
        }
    }
/**
  * array 转 xml
 * 用于生成签名
*/
public function array_to_xml($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 xml_to_array($xml){
   //禁止引用外部xml实体
  libxml_disable_entity_loader(true);
   $values =  json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
   return $values;
    }

原文链接:https://blog.csdn.net/qd55815634/article/details/78541491

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容

  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,674评论 2 59
  • 在此特此声明:一下所有链接均来自互联网,在此记录下我的查阅学习历程,感谢各位原创作者的无私奉献 ! 技术一点一点积...
    远航的移动开发历程阅读 11,072评论 12 197
  • (转)原文链接:https://blog.csdn.net/huangqili1314/article/detai...
    谷哥得小弟阅读 3,611评论 0 66
  • 1.付出不亚于任何人的努力 2.要谦虚,不要骄傲 3.要每天反省 4.活着,就要感谢 5.积善行,思利他 6.不要...
    linkkof阅读 162评论 0 0
  • 晚上走过天桥,两旁站满了人群,有的面向马路,有的背向马路,有的府着脑袋往下看,看桥下车水马龙,看路上人流不息。 从...
    高能故事阅读 318评论 0 0