php实现微 信支付之企业付款
发布时间:2023-02-10 13:57:42 所属栏目:PHP教程 来源:
导读: 网上的很多PHP微信支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,希望可以给各位想接入微信支付的带来些许帮助和借鉴意义。
直接运行该文件即可给指定的微信
直接运行该文件即可给指定的微信
|
网上的很多PHP微信支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,希望可以给各位想接入微信支付的带来些许帮助和借鉴意义。 直接运行该文件即可给指定的微信用户转账。 需要注意的事项: 1.微信企业付款到零钱要求必传证书,需要到账户中心->账户设置->API安全->下载证书,然后修改代码中的证书路径 2.该文件需放到支付授权目录下,可以在微信支付商户平台->产品中心->开发配置中设置。 3.如提示签名错误可以通过微信支付签名验证工具进行验证: 4.错误码参照: 代码如下: 账户设置->API安全->下载证书,证书路径在第207行和210行修改 * 2.错误码参照 :https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2 */ header('Content-type:text/html; Charset=utf-8'); $mchid = 'xxxxx'; //微信支付商户号 PartnerID 通过微信支付商户资料审核后邮件发送 $appid = 'xxxxx'; //微信支付申请对应的公众号的APPID $appKey = 'xxxxx'; //微信支付申请对应的公众号的APP Key $apiKey = 'xxxxx'; //https://pay.weixin.qq.com 帐户设置-安全设置-API安全-API密钥-设置API密钥 //①、获取当前访问页面的用户openid(如果给指定用户转账,则直接填写指定用户的openid) $wxPay = new WxpayService($mchid,$appid,$appKey,$apiKey); $openId = $wxPay->GetOpenid(); //获取openid if(!$openId) exit('获取openid失败'); //②、付款 $outTradeNo = uniqid(); //订单号 $payAmount = 1; //转账金额,单位:元。转账最小金额为1元 $trueName = '张三'; //收款人真实姓名 $result = $wxPay->createJsBizPackage($openId,$payAmount,$outTradeNo,$trueName); echo 'success'; class WxpayService { protected $mchid; protected $appid; protected $appKey; protected $apiKey; public $data = null; public function __construct($mchid,$key) { $this->mchid = $mchid; $this->appid = $appid; $this->appKey = $appKey; $this->apiKey = $key; } /** 通过跳转获取用户的openid,跳转流程如下: 1、设置自己需要调回的url及其其他参数,跳转到微信服务器https://open.weixin.qq.com/connect/oauth2/authorize 2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code @return 用户的openid */ public function GetOpenid() { //通过code获得openid if (!isset($_GET['code'])){ //触发微信返回code码 $scheme = $_SERVER['HTTPS']=='on' ? 'https://' : 'http://'; $baseUrl = urlencode($scheme.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']); $url = $this->__CreateOauthUrlForCode($baseUrl); Header("Location: $url"); exit(); } else { //获取code码,以获取openid $code = $_GET['code']; $openid = $this->getOpenidFromMp($code); return $openid; } } /** 通过code从工作平台获取openid机器access_token @param string $code 微信跳转回来带上的code @return openid */ public function GetOpenidFromMp($code) { $url = $this->__CreateOauthUrlForOpenid($code); $res = self::curlGet($url); //取出openid $data = json_decode($res,true); $this->data = $data; $openid = $data['openid']; return $openid; } /** 构造获取open和access_toke的url地址 @param string $code,微信跳转带回的code @return 请求的url */ private function __CreateOauthUrlForOpenid($code) { $urlObj["appid"] = $this->appid; $urlObj["secret"] = $this->appKey; $urlObj["code"] = $code; $urlObj["grant_type"] = "authorization_code"; $bizString = $this->ToUrlParams($urlObj); return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString; } /** 构造获取code的url连接 @param string $redirectUrl 微信服务器回跳的url,需要url编码 @return 返回构造好的url */ private function __CreateOauthUrlForCode($redirectUrl) { $urlObj["appid"] = $this->appid; $urlObj["redirect_uri"] = "$redirectUrl"; $urlObj["response_type"] = "code"; $urlObj["scope"] = "snsapi_base"; $urlObj["state"] = "STATE"."#wechat_redirect"; $bizString = $this->ToUrlParams($urlObj); return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString; } /** 拼接签名字符串 @param array $urlObj @return 返回已经拼接好的字符串 */ private function ToUrlParams($urlObj) { $buff = ""; foreach ($urlObj as $k => $v) { if($k != "sign") $buff .= $k . "=" . $v . "&"; } $buff = trim($buff,"&"); return $buff; } /** 企业付款 @param string $openid 调用【网页授权获取用户信息】接口获取到用户在该公众号下的Openid @param float $totalFee 收款总费用 单位元 @param string $outTradeNo 唯一的订单号 @param string $orderName 订单名称 @param string $notifyUrl 支付结果通知url 不要有问号 @param string $timestamp 支付时间 @return string / public function createJsBizPackage($openid,$totalFee,$trueName) { $config = array( 'mch_id' => $this->mchid,'appid' => $this->appid,'key' => $this->apiKey,); $unified = array( 'mch_appid' => $config['appid'],'mchid' => $config['mch_id'],'nonce_str' => self::createNonceStr(),'openid' => $openid,'check_name'=>'FORCE_CHECK',//校验用户姓名选项。NO_CHECK:不校验真实姓名,FORCE_CHECK:强校验真实姓名 're_user_name'=>$trueName,//收款用户真实姓名(不支持给非实名用户打款) 'partner_trade_no' => $outTradeNo,'spbill_create_ip' => '127.0.0.1','amount' => intval($totalFee 100),//单位 转为分 'desc'=>'付款',//企业付款操作说明信息 ); $unified['sign'] = self::getSign($unified,$config['key']); $responseXml = $this->curlPost('https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers',self::arrayToXml($unified)); $unifiedOrder = simplexml_load_string($responseXml,'SimpleXMLElement',LIBXML_NOCDATA); if ($unifiedOrder === false) { die('parse xml error'); } if ($unifiedOrder->return_code != 'SUCCESS') { die($unifiedOrder->return_msg); } if ($unifiedOrder->result_code != 'SUCCESS') { die($unifiedOrder->err_code); } return true; } (编辑:云计算网_宿迁站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


浙公网安备 33038102330477号