php 微信转账,php实现微信公众号企业转账功能

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

特点发起方式灵活,可通过页面或接口发起

微信消息触达,用户及时获知入账详情

支持实名校验,判断收款人真实身份

通过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;

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值