zoukankan      html  css  js  c++  java
  • 微信支付

      1 /**
      2     *@name 微信支付
      3     */
      4     function wxchatPay($body = '',$order_no = '',$total_fee = '',$spbill_create_ip = '') {
      5         require_once 'wx_config.php';//秘钥、appkey
      6 //        $notify_url = "http://app.yuanmakj.com/api/wxpay/WxPayMain/notify_back.php";//回调函数
      7         $notify_url = "http://114.247.209.100:8099/api/wxpay/WxPayMain/notify_back.php";//回调函数
      8         $body = $body;
      9         $key = '';//key
     10            $post_data["appid"] = '';//微信账号ID
     11            $post_data["mch_id"] = '';//商户号
     12         $post_data["nonce_str"] = createStr();//随机字符串
     13         $post_data["body"] = '112';//商品描述
     14         $post_data["out_trade_no"] = '';//商户订单号
     15         $post_data["total_fee"] = '1';//总金额   金额不能带小数点
     16         $post_data["spbill_create_ip"] = '14.23.150.211';//终端IP
     17         $post_data["notify_url"] = $notify_url;//通知地址
     18         $post_data["trade_type"] = 'APP';//交易类型
     19         $post_data["sign"] = getSign($post_data,$key);//签名
     20         //使用方法
     21         file_put_contents('aa4.txt',var_export($post_data,TRUE),FILE_APPEND);
     22         $xml_data = arrayXml($post_data);
     23         file_put_contents('aa3.txt',var_export($xml_data,TRUE),FILE_APPEND);
     24         $wx_xml_date = send_post('https://api.mch.weixin.qq.com/pay/unifiedorder', $xml_data);
     25         //发送post请求结束
     26         file_put_contents('aa1.txt',var_export($wx_xml_date,TRUE),FILE_APPEND);
     27         $wx_str_date = xmlToArray($wx_xml_date);
     28         file_put_contents('aa2.txt',var_export($wx_str_date,TRUE),FILE_APPEND);
     29         $wx_str_date['timestamp'] = time().'';//时间戳
     30         $wx_str_date['packagevalue'] = 'Sign=WXPay';//扩展字段,暂时写死(Sign=WXPay)
     31         $res['appid'] = $wx_str_date['appid'].'';
     32         $res['partnerid'] = $wx_str_date['mch_id'].'';
     33         $res['prepayid'] = $wx_str_date['prepay_id'].'';
     34         $res['package'] = $wx_str_date['packagevalue'].'';
     35         $res['noncestr'] = $wx_str_date['nonce_str'].'';
     36         $res['timestamp'] = $wx_str_date['timestamp'].'';
     37         $wx_str_date['sign'] = getSign($res,$key);
     38         $wx_str_date['sign'] = $wx_str_date['sign'].'';
     39         return $wx_str_date;
     40     }
     41     function getSign($Obj,$key)
     42     {
     43         foreach ($Obj as $k => $v)
     44         {
     45             $Parameters[$k] = $v;
     46         }
     47         //签名步骤一:按字典序排序参数
     48         ksort($Parameters);
     49         $String = formatBizQueryParaMap($Parameters, false);
     50         //echo '【string1】'.$String.'</br>';
     51         //签名步骤二:在string后加入KEY
     52         if(!empty($key)){
     53             $String = $String."&key=".$key;
     54         }
     55         //echo "【string2】".$String."</br>";
     56         //签名步骤三:MD5加密
     57         $String = md5($String);
     58         //echo "【string3】 ".$String."</br>";
     59         //签名步骤四:所有字符转为大写
     60         $result_ = strtoupper($String);
     61         //echo "【result】 ".$result_."</br>";
     62         return $result_;
     63     }
     64     /**
     65      *     作用:格式化参数,签名过程需要使用
     66      */
     67     function formatBizQueryParaMap($paraMap, $urlencode)
     68     {
     69         $buff = "";
     70         ksort($paraMap);
     71         foreach ($paraMap as $k => $v)
     72         {
     73             if($urlencode)
     74             {
     75                $v = urlencode($v);
     76             }
     77             //$buff .= strtolower($k) . "=" . $v . "&";
     78             $buff .= $k . "=" . $v . "&";
     79         }
     80         $reqPar;
     81         if (strlen($buff) > 0) 
     82         {
     83             $reqPar = substr($buff, 0, strlen($buff)-1);
     84         }
     85         return $reqPar;
     86     }
     87     /**
     88      *     作用:array转xml
     89      */
     90     function arrayXml($arr)
     91     {
     92         $xml = "<xml>";
     93         foreach ($arr as $key=>$val)
     94         {
     95              if (is_numeric($val))
     96              {
     97                  $xml.="<".$key.">".$val."</".$key.">";
     98              }
     99              else
    100                  $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";  
    101         }
    102         $xml.="</xml>";
    103         return $xml; 
    104     }
    105 
    106     /**
    107      * *获取随机字符串
    108      * @param  integer $length [description]
    109      * @return [type]          [description]
    110      */
    111     function createStr($length = 32){
    112         $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; 
    113         $str = '';
    114         $max = strlen($chars)-1;
    115         for($i=0;$i<$length;$i++){
    116             $str .=$chars[mt_rand(0,$max)];
    117         }
    118         return $str;
    119     }    
    120     /**
    121      * 发送post请求
    122      * @param string $url 请求地址
    123      * @param array $post_data post键值对数据
    124      * @return string
    125      */
    126     function send_post($url, $post_data) {
    127         $options = array(
    128                             'http' => array(
    129                             'method' => 'POST',
    130                             'header' => 'Content-type:application/x-www-form-urlencoded',
    131                             'content' => "$post_data",
    132                             'timeout' => 15 * 60 // 超时时间(单位:s)
    133                             )
    134                         );
    135         $context = stream_context_create($options);
    136         $result = file_get_contents($url, false, $context);
    137         return $result;
    138     }
    139     /**
    140      *     作用:将xml转为array
    141      */
    142     function xmlToArray($xml)
    143     {
    144         //将XML转为array
    145         $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
    146         // $array_data = json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA));
    147         return $array_data;
    148     }
  • 相关阅读:
    令人抓狂的redis和rediscluster Python驱动包的安装
    基于Docker的Consul集群实现服务发现
    应用中引入缓存层后,缓存和持久化层数据一致性的思考
    Redis中几个简单的概念:缓存穿透/击穿/雪崩,别再被吓唬了
    Redis Cluster 自动化安装,扩容和缩容
    mysql 8.0 忘记root密码后重置
    MySQL 8.0部分弃用的参数整理
    MySQL Online DDL与DML并发阻塞关系总结
    MySQL Error Log 文件丢失导致The server quit without updating PID file启动失败的场景
    MySQL删除大表时潜在的问题(drop table,truncate table)
  • 原文地址:https://www.cnblogs.com/hualingyun/p/9244441.html
Copyright © 2011-2022 走看看