企业付款提供由商户直接付钱至用户微信零钱的能力,支持平台操作及接口调用两种方式,资金到账速度快,使用及查询方便。主要用来解决合理的商户对用户付款需求,比如:保险理赔、彩票兑换等等。

特点

  • 发起方式灵活,可通过页面或接口发起
  • 微信消息触达,用户及时获知入账详情
  • 支持实名校验,判断收款人真实身份
  • 通过openid即可实现付款,无需用户敏感隐私信息
  • 到账速度快,在发起后,用户可在几分钟内收到付款

企业转账需要到微信商户平台=》产品中心=》企业付款到零钱,开启此功能

下面是程序截图:

第一步:设置配置参数

$url="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";$pars = array();$pars["mch_appid"] =$this->module["config"]["appid"];$pars["mchid"]=$this->module["config"]["mchid"];$pars["nonce_str"] =random(32);$pars["partner_trade_no"] =time().random(3,1);$pars["openid"] =$openid;$pars["check_name"] ="NO_CHECK" ;//$pars["re_user_name"] ="" ;$monet_finall = $price * 100;$pars["amount"] =$monet_finall; //这里是折算成1%的所以要*100$pars["desc"] ="您已成功提现 ".$price." 现金";$pars["spbill_create_ip"] =$this->module["config"]["ip"];ksort($pars, SORT_STRING);$string1 = "";foreach ($pars as $k => $v) {  $string1 .= "{$k}={$v}&";}$string1 .= "key=".$this->module["config"]["password"];$pars["sign"] = strtoupper(md5($string1));$xml = array2xml($pars);$extras = array();$extras["CURLOPT_CAINFO"] = ATTACHMENT_ROOT . "/withdraw/cert/rootca.pem." . $_W["uniacid"];$extras["CURLOPT_SSLCERT"] = ATTACHMENT_ROOT   . "/withdraw/cert/apiclient_cert.pem." . $_W["uniacid"];$extras["CURLOPT_SSLKEY"] = ATTACHMENT_ROOT . "/withdraw/cert/apiclient_key.pem." . $_W["uniacid"];$procResult = null;

第二步:CURL请求微信服务器

load()->func("communication");$resp = ihttp_request($url, $xml, $extras);

其中ihttp_request函数内容是:

function ihttp_request($url, $post = "", $extra = array(), $timeout = 60) {  $urlset = parse_url($url);  if (empty($urlset["path"])) {   $urlset["path"] = "/";  }  if (!empty($urlset["query"])) {   $urlset["query"] = "?{$urlset["query"]}";  }  if (empty($urlset["port"])) {     }  if (strexists($url, "https://") && !extension_loaded("openssl")) {   if (!extension_loaded("openssl")) {     message("请开启您PHP环境的openssl");   }  }  if (function_exists("curl_init") && function_exists("curl_exec")) {   $ch = curl_init();   if (!empty($extra["ip"])) {     $extra["Host"] = $urlset["host"];     $urlset["host"] = $extra["ip"];     unset($extra["ip"]);   }   curl_setopt($ch, CURLOPT_URL, $urlset["scheme"] . "://" . $urlset["host"] . ($urlset["port"] == "80" || empty($urlset["port"]) ? "" : ":" . $urlset["port"]) . $urlset["path"] . $urlset["query"]);   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);   curl_setopt($ch, CURLOPT_HEADER, 1);   @curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);   if ($post) {     if (is_array($post)) {      $filepost = false;            foreach ($post as $name => &$value) {        if (version_compare(phpversion(), "5.6") >= 0 && substr($value, 0, 1) == "@") {         $value = new CURLFile(ltrim($value, "@"));        }        if ((is_string($value) && substr($value, 0, 1) == "@") || (class_exists("CURLFile") && $value instanceof CURLFile)) {         $filepost = true;        }      }      if (!$filepost) {        $post = http_build_query($post);      }     }     curl_setopt($ch, CURLOPT_POST, 1);     curl_setopt($ch, CURLOPT_POSTFIELDS, $post);   }   if (!empty($GLOBALS["_W"]["config"]["setting"]["proxy"])) {     $urls = parse_url($GLOBALS["_W"]["config"]["setting"]["proxy"]["host"]);     if (!empty($urls["host"])) {      curl_setopt($ch, CURLOPT_PROXY, "{$urls["host"]}:{$urls["port"]}");      $proxytype = "CURLPROXY_" . strtoupper($urls["scheme"]);      if (!empty($urls["scheme"]) && defined($proxytype)) {        curl_setopt($ch, CURLOPT_PROXYTYPE, constant($proxytype));      } else {        curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);      }      if (!empty($GLOBALS["_W"]["config"]["setting"]["proxy"]["auth"])) {        curl_setopt($ch, CURLOPT_PROXYUSERPWD, $GLOBALS["_W"]["config"]["setting"]["proxy"]["auth"]);      }     }   }   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);   curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);   curl_setopt($ch, CURLOPT_SSLVERSION, 1);   if (defined("CURL_SSLVERSION_TLSv1")) {     curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);   }   curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1");   if (!empty($extra) && is_array($extra)) {     $headers = array();     foreach ($extra as $opt => $value) {      if (strexists($opt, "CURLOPT_")) {        curl_setopt($ch, constant($opt), $value);      } elseif (is_numeric($opt)) {        curl_setopt($ch, $opt, $value);      } else {        $headers[] = "{$opt}: {$value}";      }     }     if (!empty($headers)) {      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);     }   }   $data = curl_exec($ch);   $status = curl_getinfo($ch);   $errno = curl_errno($ch);   $error = curl_error($ch);   curl_close($ch);   if ($errno || empty($data)) {     return error(1, $error);   } else {     return ihttp_response_parse($data);   }  }  $method = empty($post) ? "GET" : "POST";  $fdata = "{$method} {$urlset["path"]}{$urlset["query"]} HTTP/1.1";  $fdata .= "Host: {$urlset["host"]}";  if (function_exists("gzdecode")) {   $fdata .= "Accept-Encoding: gzip, deflate";  }  $fdata .= "Connection: close";  if (!empty($extra) && is_array($extra)) {   foreach ($extra as $opt => $value) {     if (!strexists($opt, "CURLOPT_")) {      $fdata .= "{$opt}: {$value}";     }   }  }  $body = "";  if ($post) {   if (is_array($post)) {     $body = http_build_query($post);   } else {     $body = urlencode($post);   }   $fdata .= "Content-Length: " . strlen($body) . "{$body}";  } else {   $fdata .= "";  }  if ($urlset["scheme"] == "https") {   $fp = fsockopen("ssl://" . $urlset["host"], $urlset["port"], $errno, $error);  } else {   $fp = fsockopen($urlset["host"], $urlset["port"], $errno, $error);  }  stream_set_blocking($fp, true);  stream_set_timeout($fp, $timeout);  if (!$fp) {   return error(1, $error);  } else {   fwrite($fp, $fdata);   $content = "";   while (!feof($fp))     $content .= fgets($fp, 512);   fclose($fp);   return ihttp_response_parse($content, true);  }}

第三步:解析分析微信服务器返回值并返回。

if (is_error($resp)) {  $procResult = $resp;} else {  $arr=json_decode(json_encode((array) simplexml_load_string($resp["content"])), true);  $xml = "<?xml version="1.0" encoding="utf-8"?>" . $resp["content"];  $dom = new DOMDocument();  if ($dom->loadXML($xml)) {    $xpath = new DOMXPath($dom);    $code = $xpath->evaluate("string(//xml/return_code)");    $ret = $xpath->evaluate("string(//xml/result_code)");    if (strtolower($code) == "success" && strtolower($ret) == "success") {      $procResult = array("errno"=>0,"error"=>"success");;    } else {      $error = $xpath->evaluate("string(//xml/err_code_des)");      $procResult = array("errno"=>-2,"error"=>$error);    }  } else {    $procResult = array("errno"=>-1,"error"=>"未知错误");  }}return $procResult;

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