首頁 後端開發 php教程 微信支付,企业号支付个人,php实现

微信支付,企业号支付个人,php实现

Jun 23, 2016 pm 01:15 PM

导语:分销商,微商提现怎么提?直接用微信支付。

实现如下:

  • 微信支付配置
/*微信支付*/    'PAY_WEIXIN'                => array(        'appid'                 => 'xxx',        'appsecret'             => 'xxxxx',        'mchid'                 => '1283301801',                                                //商户号        'key'                   => 'zhudianbaodiandodozhudianbao0527',                          //商户支付秘钥        'apiclient_cert'        => 'Conf/cert/apiclient_cert.pem',                              //商户证书apiclient_cert.pem        'apiclient_key'         => 'Conf/cert/apiclient_key.pem',                               //商户证书apiclient_key.pem    )
登入後複製
  • arrayToXml

    /**   *     array转xml   */  function arrayToXml($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;   }
    登入後複製
  • 使用证书,以post方式提交xml到对应的接口url

/**    *     作用:使用证书,以post方式提交xml到对应的接口url    */    function postXmlSSLCurl($xml, $url, $second, $cert, $key)    {        $ch = curl_init();        //超时时间        curl_setopt($ch,CURLOPT_TIMEOUT,$second ? $second : $this->timeout);        //这里设置代理,如果有的话        //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');        //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);        //设置header        curl_setopt($ch,CURLOPT_HEADER,FALSE);        //要求结果为字符串且输出到屏幕上        curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);        //设置证书        //使用证书:cert 与 key 分别属于两个.pem文件        //默认格式为PEM,可以注释        curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');        curl_setopt($ch,CURLOPT_SSLCERT,$cert);        //默认格式为PEM,可以注释        curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');        curl_setopt($ch,CURLOPT_SSLKEY, $key);        //post提交方式        curl_setopt($ch,CURLOPT_POST, true);        curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);        $data = curl_exec($ch);        //返回结果        if($data){            curl_close($ch);            return $this->xmlToArray($data);        }        else {            $error = curl_errno($ch);            echo "curl出错,错误码:$error"."<br>";             curl_close($ch);            return false;        }    }
登入後複製
  • 企业向个人付款
//企业向个人付款    public function payToUser($params, $key, $apicent_cert, $apiclient_key) {        $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';        //检测必填参数        if($params["partner_trade_no"] == null) {   //            exit("退款申请接口中,缺少必填参数partner_trade_no!"."<br>");        }elseif($params["openid"] == null){            exit("退款申请接口中,缺少必填参数openid!"."<br>");        }elseif($params["check_name"] == null){             //NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账)OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)            exit("退款申请接口中,缺少必填参数check_name!"."<br>");        }elseif(($params["check_name"] == 'FORCE_CHECK' or $params["check_name"] == 'OPTION_CHECK') && ($params["re_user_name"] == null)){  //收款用户真实姓名。            exit("退款申请接口中,缺少必填参数re_user_name!"."<br>");        }elseif($params["amount"] == null){            exit("退款申请接口中,缺少必填参数amount!"."<br>");        }elseif($params["desc"] == null){            exit("退款申请接口中,缺少必填参数desc!"."<br>");        }        $params["mch_appid"] = $this->appid;//公众账号ID        $params["mchid"] = $this->mchid;//商户号        $params["nonce_str"] = $this->createNoncestr();//随机字符串        $params['spbill_create_ip'] = $_SERVER['REMOTE_ADDR'] == '::1' ? '192.127.1.1' : $_SERVER['REMOTE_ADDR'];//获取IP        $params["sign"] = $this->getSign($params, $key);//签名        $xml = $this->arrayToXml($params);        return $this->postXmlSSLCurl($xml, $url, false, $apicent_cert, $apiclient_key);    }
登入後複製
  • 企业付款
private function _enterprisePay($number, $member_id, $amount, $desc)    {        // 获取openid        $wxuser_id = M('Member')->where(array('id' => $member_id))->getField('wxuser_id');        $openid    = M('Wxuser')->where(array('id' => $wxuser_id))->getField('openid');        $pay = C('PAY_WEIXIN');        import('@.Action.WxDevelop');        $enterprise = new WxEnterprise($pay['appid'], $pay['appsecret'], $pay['mchid']);        $params = array(            'partner_trade_no' => $number,            'openid' => $openid,            'check_name' => 'NO_CHECK',            'amount' => $amount, // 总计            'desc' => $desc,        );        $result = $enterprise->payToUser($params, $pay['key'], $pay['apiclient_cert'], $pay['apiclient_key']);        return $result;    }
登入後複製
  • 处理分销商提现
private function _handle($truename, $price) { // 处理分销商提现        $withdrawid = date("ymdHis") . strval(rand(1000, 9999));        $data = array('withdrawid' => $withdrawid, 'store_id' => $this->store_id, 'member_id' => $this->member_id, 'truename' => $truename, 'price' => $price, 'addtime' => time());        //免审核        if ($price >= C('withdraw_uncheck_value')) {            $data['need_check'] = 0;            $data['status'] = 1;            if ($this->withdrawModel->add($data)) {                $result = $this->_enterprisePay($withdrawid, $this->member_id, $price * 100, '分销商(' . $truename . ')提现');                //遇到支付信息出错,转为需审核提现                if ($result['return_code'] != 'SUCCESS') {                    $this->withdrawModel->where(array('withdrawid' => $withdrawid))->save(array('need_check' => 1, 'status' => 0));                    $this->assign('success', 2);                }                else {                    //设置微信交易号                    $this->withdrawModel->where(array('withdrawid' => $withdrawid))->save(array('payment_no' => $result['payment_no']));                    //增加佣金流水,待修复                    $data = array('store_id' => $this->store_id, 'user_type' => 2, 'user_id' => $this->shop_id, 'trade_type' => 2, 'trade_no' => $withdrawid, 'price' => -$price, 'status'=> 1,  'message' => $truename.'提现', 'addtime' => time());                    M('Twitter_log')->add($data);                    //减少相应可提佣金                    M('Member')->where(array('id' => $this->member_id))->setInc('money', -$price);                    $this->assign('success', 1);                    //发送佣金变动消息                    import('@.Action.Tmplmsg');                    $tmplmsg = new Tmplmsg();                    $tmplmsg->send(Tmplmsg::PRICE_CHANGE, $this->member_id, array('token' => $this->token, 'intro' => '分销佣金提现转出', 'price' => $price, 'business' => BUSINESS));                }            }            else {                $this->error('提现信息错误!');            }        }        //需要审核        else {            $this->withdrawModel->add($data);            $this->assign('success' , 2);        }    }
登入後複製

提供企业向用户付款的功能,支持企业通过API接口付款,或通过微信支付商户平台网页功能操作付款。

温馨提示:◆ 给同一个实名用户付款,单笔单日限额2W/2W◆ 给同一个非实名用户付款,单笔单日限额2000/2000◆ 一个商户同一日付款总额限额100W◆ 仅支持商户号已绑定的APPID;◆ 针对付款的目标用户,已微信支付实名认证的用户可提供校验真实姓名的功能,未实名认证的用户无法校验,企业可根据自身业务的安全级别选择验证类型;◆ 付款金额必须小于或等于商户当前可用余额的金额;◆ 已付款的记录,企业可通过企业付款查询查看相应数据。

到账 付款资金将进入目标用户的零钱(微信-我-钱包-零钱)。微信支付将做零钱入账消息通知,零钱收支明细会展示相应记录。

温馨提示:针对无零钱账户的历史客户端版本,资金将进入用户的红包账户,微信支付无消息通知用户,企业可选择自行触达用户。

接口链接:https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers

是否需要证书请求需要双向证书。

数据示例:

<xml><mch_appid>wxe062425f740c30d8</mch_appid><mchid>10000098</mchid><nonce_str>3PG2J4ILTKCH16CQ2502SI8ZNMTM67VS</nonce_str><partner_trade_no>100000982014120919616</partner_trade_no><openid>ohO4Gt7wVPxIT1A9GjFaMYMiZY1s</openid><check_name>OPTION_CHECK</check_name><re_user_name>张三</re_user_name><amount>100</amount><desc>节日快乐!</desc><spbill_create_ip>10.2.3.10</spbill_create_ip><sign>C97BDBACF37622775366F38B629F45E3</sign></xml>
登入後複製

成功示例:

<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[]]></return_msg><mch_appid><![CDATA[wxec38b8ff840bd989]]></mch_appid><mchid><![CDATA[10013274]]></mchid><device_info><![CDATA[]]></device_info><nonce_str><![CDATA[lxuDzMnRjpcXzxLx0q]]></nonce_str><result_code><![CDATA[SUCCESS]]></result_code><partner_trade_no><![CDATA[10013574201505191526582441]]></partner_trade_no><payment_no><![CDATA[1000018301201505190181489473]]></payment_no><payment_time><![CDATA[2015-05-19 15:26:59]]></payment_time></xml>
登入後複製

错误示例:

<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[系统繁忙,请稍后再试.]]></return_msg><result_code><![CDATA[FAIL]]></result_code><err_code><![CDATA[SYSTEMERROR]]></err_code><err_code_des><![CDATA[系统繁忙,请稍后再试.]]></err_code_des></xml>
登入後複製

参考资料:https://pay.weixin.qq.com/wiki/doc/api/mch_pay.php?chapter=14_2

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

微信支付密碼忘了怎麼找回 微信支付密碼忘了怎麼找回 Feb 23, 2024 pm 09:40 PM

微信中使用者可以輸入付款密碼購物,那麼付款密碼忘了怎麼找回來呢?用戶需要我的-服務-錢包-支付設定-忘記支付密碼就能恢復。這篇支付密碼忘記找回方法介紹就能告訴大家具體的操作方法,以下就是詳細介紹,趕快看看吧!微信使用教程微信支付密碼忘記了怎麼找回答:我的-服務-錢包-支付設定-忘記支付密碼具體方法:1、先點擊我的。 2、點選裡面的服務。 3.點擊裡面的錢包。 4、找到支付設定。 5.點選忘記支付密碼。 6、輸入自己的資料驗證。 7.然後輸入新的支付密碼就可以更改了。

微信支付密碼忘了怎麼辦 微信支付密碼忘了怎麼辦 Jan 08, 2024 pm 05:02 PM

微信支付密碼忘記了的解決辦法:1、打開微信APP,點擊右下角的”我“,進入個人中心頁面;2、在個人中心頁面中,點擊“支付”,進入支付頁面;3、在支付頁面中,點選右上角的“…”,進入付款管理頁面;4、在付款管理頁面中,找到並點擊“忘記支付密碼”;5、按照頁面提示,輸入個人資訊進行身份驗證,驗證成功後,可以選擇「刷臉找回」或「驗證銀行卡資訊找回」的方式來找回密碼等等。

美團外送怎麼設定微信支付 設定微信付款的方法 美團外送怎麼設定微信支付 設定微信付款的方法 Mar 12, 2024 pm 10:34 PM

  美團外帶app軟體內提供的美食小吃店舖非常多,而且所有的手機用戶都是透過帳號登入的。新增個人的收貨地址以及聯絡電話,享受最方便的外帶服務。打開軟體首頁,即可輸入商品關鍵字,線上搜尋就能找到相對應的商品結果,上下滑動選購下單即可,平台也會根據用戶提供的配送地址,推薦週邊附近數十家好評超高的店鋪,還能設定不同的支付方式,一鍵下單完成訂單即可,騎手第一時間安排配送速度非常快,還有不同金額的外賣紅包領取使用,現在小編在線詳細為美團外賣用戶們帶來設定微信付款的方法。  1選擇好商品後,提交訂單,點選立

微信支付扣款順序怎麼設置 微信支付扣款順序怎麼設置 Sep 06, 2023 am 11:11 AM

微信支付扣款順序設定步驟:1、開啟微信APP,點選「我」介面,點選「服務」,再點選「收付款」;2、點選收付款介面付款碼下方的「優先使用此付款方式」; 3.選擇自己需要的優先支付方式即可。

微信支付成功後能馬上取消嗎 微信支付成功後能馬上取消嗎 Nov 29, 2023 pm 02:19 PM

微信支付成功後不能馬上取消。退款通常需要滿足以下條件:1、商家的退款政策,商家會制定自己的退款政策,包括退款的時間窗口、退款金額和退款方式等;2、支付時間,退款通常需要在一定的時間範圍內進行申請,超過該時間範圍可能無法退款;3、商品或服務狀態,如果用戶已經收到了商品或享受了服務,商家可能會要求用戶將商品退回或提供相應的證明; 4、退款流程等等。

閒魚可以用微信付錢嗎 改成微信付款的方法 閒魚可以用微信付錢嗎 改成微信付款的方法 Mar 12, 2024 pm 12:19 PM

大家沒事的時候,都是會選擇逛逛閒魚這一平台的,大家都能夠發現這一平台上,是有著大量的一些商品的存在,都能夠讓大家看到各種各樣的一些二手的寶貝,雖然是二手的產品,但是這一些產品的質量,絕對都是沒有任何的問題,所以大家都能夠放心的選購,價格都是特別的實惠,都還是能讓大家面對面的與這一些賣家們進行交流溝通,進行一些講價的操作,完全都是可以的,只要大家談的妥當的話,那麼你們就能夠選擇進行交易,且大家在這裡付款的時候,想要進行微信付款,但是好像平台上是不允許,具體情況如何,跟著小編一起來看看吧。閒魚

微信支付申請退款的步驟分享 微信支付申請退款的步驟分享 Mar 25, 2024 pm 06:31 PM

1.首先我們需要打開手機上的微信APP,然後點選登入微信帳號,這樣就進入了微信的首頁。 2.在微信首頁點選右下角的【我】按鈕,再選擇【付款】選項,我們點選進入支付頁面。 3.進入【付款】頁面後點選【錢包】選項進入,在【錢包】頁面點選右上角的【帳單】。

阿里巴巴怎麼用微信付款_阿里巴巴1688用微信支付方法 阿里巴巴怎麼用微信付款_阿里巴巴1688用微信支付方法 Mar 20, 2024 pm 05:51 PM

阿里巴巴1688是採購批發網,裡面的東西要比淘寶便宜很多。那麼阿里巴巴怎麼能用微信付款呢?小編整理了一些相關內容分享給大家,有需要的朋友可以來看看喔。阿里巴巴怎麼用微信付款答案:暫不能使用微信付款;1、我們在購買商品的頁面中我們點擊其中的【更換支付方式】2、然後在彈出的頁面中我們可以到只有【支付寶、分階段付款、收銀台】可以選擇;

See all articles