H5微信登錄

<?php

namespace App\Service\waph5;

/*

  • 小程序微信支付
    */

    class WapPayService {

    protected $appid;
    protected $mch_id;
    protected $key;
    protected $openid;
    protected $total_fee;
    protected $out_trade_no;
    protected $body;

function init(array $data) {
    $this->appid = '';
    $this->mch_id = '';
    $this->key = '';
    $this->total_fee = $data['total_fee'];
    $this->out_trade_no = $data['out_trade_no'];
    $this->body = $data['remark'];
}

//統(tǒng)一下單接口
public function unifiedOrder() {
    $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
    $parameters = array(
        'appid' => $this->appid, //小程序ID
        'mch_id' => $this->mch_id, //商戶號
        'nonce_str' => $this->createNoncestr(), //隨機(jī)字符串
        'body' => $this->body, //商品描述
        'out_trade_no' => $this->out_trade_no, //商戶訂單號
        'total_fee' => $this->total_fee, //floatval($this->total_fee * 100), //總金額 單位 分
        'spbill_create_ip' => $this->getIp(), //終端IP
        'notify_url' => \App::config()->get('app', 'host') . 'api/onNotify', //通知地址
        'trade_type' => 'MWEB', //交易類型
        'scene_info' => '{"h5_info": {"type":"Wap","wap_url": "https://xieyi.gzyoufa.com","wap_name": "攜逸訂房"}}'
    );
    //統(tǒng)一下單簽名
    $parameters['sign'] = $this->getSign($parameters,$this->key);

    // print_r($parameters);die;
    $xmlData = $this->arrayToXml($parameters);
    $return = $this->http($url, 'POST', $xmlData);
    return $this->xmlToArray($return);
}



//作用:產(chǎn)生隨機(jī)字符串糕韧,不長于32位
private function createNoncestr($length = 32) {
    $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
        $str.= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
}

//作用:生成簽名
private function getSign($params, $appkey, $separator = '&') {

    if (isset($params['sign'])) {
        unset($params['sign']);
    }
    ksort($params);
    $str = "";
    foreach ($params as $key => $value) {
        if (empty($value) && $value !== 0) {
            continue;
        }

        $str .= $key . "=" . $value . $separator;
    }

    $str = trim($str, $separator);
    $raw = $str . $separator .'key='.$appkey;
    return \strtoupper(md5($raw));
}

/**
 * 作用:將xml轉(zhuǎn)為array
 */
public function xmlToArray($xml) {
    //將XML轉(zhuǎn)為array
    $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
    return $array_data;
}

function arrayToXml($arr) {
    $xml = "<root>";
    foreach ($arr as $key => $val) {
        if (is_array($val)) {
            $xml.="<" . $key . ">" . arrayToXml($val) . "</" . $key . ">";
        } else {
            $xml.="<" . $key . ">" . $val . "</" . $key . ">";
        }
    }
    $xml.="</root>";
    return $xml;
}

public function http($url, $method = 'GET', $postfields = null, $headers = array(), $debug = false) {
    $ci = curl_init();
    /* Curl settings */
    curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ci, CURLOPT_TIMEOUT, 30);
    curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);

    switch ($method) {
        case 'POST':
            curl_setopt($ci, CURLOPT_POST, true);
            if (!empty($postfields)) {
                curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
                $this->postdata = $postfields;
            }
            break;
    }
    curl_setopt($ci, CURLOPT_URL, $url);
    curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ci, CURLINFO_HEADER_OUT, true);

    $response = curl_exec($ci);
    $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);

    if ($debug) {
        echo "=====post data======\r\n";
        var_dump($postfields);

        echo '=====info=====' . "\r\n";
        print_r(curl_getinfo($ci));

        echo '=====$response=====' . "\r\n";
        print_r($response);
    }
    curl_close($ci);
    return $response;
}

public function getIp() {
    //獲取用戶IP
    if (getenv('HTTP_CLIENT_IP')) {
        $onlineip = getenv('HTTP_CLIENT_IP');
    } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
        $onlineip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif (getenv('REMOTE_ADDR')) {
        $onlineip = getenv('REMOTE_ADDR');
    } else {
        $onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
    }

    return $onlineip;
}

}

例子:
$wapService = new WapPayService();
$wapService->init($paymentConf);
$return = $wapService->unifiedOrder();//統(tǒng)一下單

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捉腥,更是在濱河造成了極大的恐慌鉴裹,老刑警劉巖颈墅,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件章母,死亡現(xiàn)場離奇詭異存哲,居然都是意外死亡因宇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門祟偷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來察滑,“玉大人,你說我怎么就攤上這事修肠『爻剑” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵嵌施,是天一觀的道長饲化。 經(jīng)常有香客問我,道長吗伤,這世上最難降的妖魔是什么吃靠? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮足淆,結(jié)果婚禮上巢块,老公的妹妹穿的比我還像新娘礁阁。我一直安慰自己,他們只是感情好族奢,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布姥闭。 她就那樣靜靜地躺著,像睡著了一般越走。 火紅的嫁衣襯著肌膚如雪棚品。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天廊敌,我揣著相機(jī)與錄音铜跑,去河邊找鬼。 笑死庭敦,一個胖子當(dāng)著我的面吹牛疼进,可吹牛的內(nèi)容都是我干的薪缆。 我是一名探鬼主播秧廉,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拣帽!你這毒婦竟也來了疼电?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤减拭,失蹤者是張志新(化名)和其女友劉穎蔽豺,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拧粪,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡修陡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了可霎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魄鸦。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖癣朗,靈堂內(nèi)的尸體忽然破棺而出拾因,到底是詐尸還是另有隱情,我是刑警寧澤旷余,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布绢记,位于F島的核電站,受9級特大地震影響正卧,放射性物質(zhì)發(fā)生泄漏蠢熄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一炉旷、第九天 我趴在偏房一處隱蔽的房頂上張望签孔。 院中可真熱鬧惠遏,春花似錦、人聲如沸骏啰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽判耕。三九已至透绩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間壁熄,已是汗流浹背帚豪。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留草丧,地道東北人狸臣。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像昌执,于是被迫代替她去往敵國和親烛亦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容