1. 程式人生 > >PHP在PC端實現微信掃碼支付模式二

PHP在PC端實現微信掃碼支付模式二

遇到的問題是微信掃碼支付可以成功,但是掃碼成功之後的回撥函式卻怎麼也沒有反應。
吶吶吶,敲黑板,劃重點了,在網上看了好多資料說,PHP的PC端微信掃碼支付模式二這個回撥就是不會響應的!然後,這個回撥函式在連結上是不能跟引數的,並且模式一需要在微信開發者後臺配置回撥地址。
所以不能太依賴它這個回撥,需要自己實現微信訂單查詢的API,當查詢結果trade_state為SUCCESS時,表明支付成功,然後處理支付成功之後的業務邏輯。
下面附上自己的訂單查詢程式碼:

static function orderQuery($data)
    {
        $url = "https://api.mch.weixin.qq.com/pay/orderquery"
; $input = array(); $input['appid'] = ''; //APPID $input['mch_id'] = ''; //商戶號 $input['nonce_str'] = SELF::getNonceStr(); //var_dump($input['nonce_str']); $input['out_trade_no'] = $data['is_ordered']; //生成簽名 $sign = 'appid=&mch_id=&nonce_str='
.$input['nonce_str'].'&out_trade_no='.$data['is_ordered'].'&key='; //key API金鑰 $sign = strtoupper(md5(urldecode($sign))); $input['sign'] = $sign; //var_dump($sign); $xml = SELF::ToXml($input); //var_dump($xml); $timeOut = 6; $startTimeStamp
= self::getMillisecond();//請求開始時間 $response = self::postXmlCurl($xml, $url, false, $timeOut); $result = SELF::Init($response); //self::reportCostTime($url, $startTimeStamp, $result);//上報請求花費時間 return $result; }

生成隨機數

public static function getNonceStr($length = 32)
    {
        $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
        $str ="";
        for ( $i = 0; $i < $length; $i++ )  {
            $str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);
        }
        return $str;
    }

陣列轉化成xml格式

public static function ToXml($input)
    {

        if(empty($input)
            || count($input) <= 0)
        {
            throw new WxPayException("陣列資料異常!");
        }

        $xml = "<xml>";
        foreach ($input as $key=>$val)
        {
            if (is_numeric($val)){
                $xml.="<".$key.">".$val."</".$key.">";
            }else{
                $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
            }
        }
        $xml.="</xml>";
        return $xml;
    }

傳送請求

private static function postXmlCurl($xml, $url, $useCert = false, $second)
    {

        $ch = curl_init();

        //設定超時
        curl_setopt($ch, CURLOPT_TIMEOUT, $second);

        curl_setopt($ch,CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//嚴格校驗
        //設定header
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        //要求結果為字串且輸出到螢幕上
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

        if($useCert == true){
            //設定證書
            //使用證書:cert 與 key 分別屬於兩個.pem檔案
            curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
            curl_setopt($ch,CURLOPT_SSLCERT, WxPayConfig::SSLCERT_PATH);
            curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
            curl_setopt($ch,CURLOPT_SSLKEY, WxPayConfig::SSLKEY_PATH);
        }
        //post提交方式
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
        //執行curl
        $data = curl_exec($ch);
        //返回結果
        if($data){
            curl_close($ch);
            return $data;
        } else {
            $error = curl_errno($ch);
            curl_close($ch);
            throw new WxPayException("curl出錯,錯誤碼:$error");
        }
    }

請求的結果是xml格式的需要轉化成陣列格式

public static function Init($xml)
    {
        $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        return $array_data;
    }

相關推薦

PHP在PC實現支付模式

遇到的問題是微信掃碼支付可以成功,但是掃碼成功之後的回撥函式卻怎麼也沒有反應。 吶吶吶,敲黑板,劃重點了,在網上看了好多資料說,PHP的PC端微信掃碼支付模式二這個回撥就是不會響應的!然後,這個回撥函式在連結上是不能跟引數的,並且模式一需要在微信開發者後臺配置

JAVA支付模式功能實現以及回撥

一、準備工作 首先吐槽一下微信關於支付這塊,本身支援的支付模式就好幾種,但是官方文件特別零散,連像樣的Java相關的demo也沒幾個。本人之前沒有搞過微信支付,一開始真是被它搞暈,折騰兩天終於調通了,特此寫下來,以享後人吧! 其中APP_ID和APP_SECRET可以在

Java實現支付---方式

話不多說直接上程式碼: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.

thinkphp5.0 支付模式

report apt console hid time() sca jquery namespace bat 僅供個人參考,方便大家。 一、1)https://pay.weixin.qq.com/index.php/core/home/login 復制此地址 打開微信

支付模式開發(一)

前言 在涉及到計費的Web專案中,我們往往會用到微信支付,僅根據微信提供的支付介面開發有一定的難度。之前在做微信掃碼支付開發的時候走了很多彎路,而且當時太忙,沒空做開發過程的記錄,在這裡把整個支付的開發總結一下。 微信提供的支付方式:微信支付 關於微信掃碼支

php支付模式(圖解 一看就懂)

掃碼支付一直坑了我很久,最近解開了這個迷霧,今天給大家詳細的講解一下 直接上官方給的sdk 有些人可能進去了以後 一個是亂碼,一個是模式二的二維碼無法出現 首先我們要解決一個問題 將 /lib/WxPay.Api.php 函式 postXmlCurl 中的兩行程式

thinkphp支付模式

1.參考本部落格的博文《thinkphp3.2實現微信JSAPI支付》,在此基礎上實現微信掃碼支付只需做簡單修改; 2.只需改WxPayAction裡面pay函式裡面三個地方: 1)將支付型別JSAPI改成NATIVE:$this->setParameter("tr

支付模式 開發

概要 主要記錄自己的開發流程,使用的springMVC 支付流程 引入相關依賴 <!-- 微信支付 --> <dependency> <groupId>com.github.wxpay</grou

JAVA實現支付回撥Demo

掃碼效果演示圖 專案結構圖: 微信實現JAVA掃碼支付的Demo原始碼,做這個做的很辛苦,熬夜了幾個晚上才把支付和回撥做好的,在這裡貼一下相關程式碼,以免更多開發者避免遇到這些坑,有不動的問題可以加我Q76949433,提供技術支援 package com.

JAVA WEB實現支付模式

一.準備微信掃碼支付要用到的相關引數,這裡將其全部寫入一個配置類,程式碼如下: public class ZbWxPayConfig {     public static String APP_ID = "***********************";     pub

php支付模式一詳解

最近有個專案要用到微信支付,在此之前沒有研究過這方面,遇到了很多坑,剛剛解決了一些問題,先記錄一下,後期完善後會貼上完整專案。模式一比模式二要複雜一點,就是本地回撥的區別 看了官方的sdk和demo,我還是摸不著頭腦,歸根結底是沒有弄清楚給的邏輯。 下面上官方邏輯圖  

支付 模式一 (JSAPI)

這個微信支付是靜態二維碼支付,就是店面貼著一個二維碼,讓消費者自己掃自己輸入金額,自己發起支付的支付方式。 要準備的東西比較麻煩: 1、到微信公眾號平臺設定Oauth2的網頁驗證域名(用於獲取code,code用於拿到發起支付的openId),格式是www.

支付(模式一)遇到的那些坑

在這個二維碼風起雲湧的時代,線上支付已經成為潮流,沒事掃一掃,打賞一下我也不介意。 醞釀 談坑之前先聊一聊模式一的大體流程,模式一的適用場景一般為自助售賣機或者固定價格的商品的線下交易居多。 當然我能想象到的線上交易,比如,對於固定價格的商品進行支付,由商戶交易

支付--模式

官方有關掃碼支付的相關API https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4 業務流程說明: (1)商戶後臺系統根據微信支付規定格式生成二維碼(規則見下文),展示給使用者掃碼。 (2)使用者開

pc支付支付寶在線支付(還未驗證 先留著)

無需 host var efi 成功 raw func pwd 更改 本DEMO演示了PHP支付寶和微信掃碼在線支付,支付成功後,在回調地址顯示支付相關信息。 操作步驟: 1.修改配置文件 Application/common/conf/config.php $arr =

PHP PC支付模式】詳細教程-附帶源(轉)

idt class pid 方法 按鈕 -c 商戶 開源 玩意兒 博主寫這破玩意兒的時候花了大概快兩天時間才整體的弄懂邏輯,考慮了一下~還是把所有代碼都放出來給大家~抱著開源大無私的精神!誰叫我擅長拍黃片呢?同時也感謝我剛入行時候那些無私幫過我的程序員們! 首先還是

ThinkPHP5.0整合支付(PC

前兩天發現微信官方測試掃碼支付的連結崩了,公益404了,http://paysdk.weixin.qq.com,微信也不說一聲,這讓使用這個連結生成二維碼的使用者情何以堪......只好下載官方的demo放到自己網站上生成二維碼了。 趁熱打鐵,把微信支付demo整合到tp5裡面,實現微信掃碼

php支付(僅pc支付模式)詳細步驟

https://segmentfault.com/a/1190000008606526 一. 首先你們公司開通微信支付功能後,會收到一份郵件,裡面有賬戶相關資訊,一般有:微信支付商戶號,商戶平臺登入帳號,商戶平臺登入密碼,申請對應的公眾號,公眾號APPID。 1.下

支付商戶後,輸入金額支付 php原始碼下載 類似閃惠、到店付功能實現教程和原始碼

現在市場上流行的微信掃商戶二維碼後,輸入金額支付。使用者和商家使用很方便,技術上怎麼實現的呢? 本文主要講原理和具體實現程式碼,介面請自己設計,微信官網已經提供資料,其中的程式碼稍做修改就可實現,但是沒有說清楚對於掃碼輸入金額支付具體怎麼做。 一、微信官網資料 業務流程

thinkphp整合系列之支付

verify ets open exception date ssd 輸出 兼容 input <?phperror_reporting(E_ALL);ini_set(‘display_errors‘, ‘1‘);// 定義時區ini_set(‘date.timezon