Inhaltsverzeichnis
一、订单查询
二、实现细节
1. 获得access token
2. 参数生成
3.提交查询
三、订单结果
Heim Backend-Entwicklung PHP-Tutorial 微信支付开发(5) 订单查询_PHP教程

微信支付开发(5) 订单查询_PHP教程

Jul 13, 2016 am 10:29 AM
开发教程 微信开发 微信支付

本文介绍微信支付中订单查询功能的实现。

作者:方倍工作室

地址:http://www.cnblogs.com/txw1958/p/wxpay-order-query.html

 

一、订单查询

因为某一方技术的原因,可能导致商户在预期时间内都收不到最终支付通知,此时商户可以通过该API来查询订单的详细支付状态。

订单查询API的URL为:

https://api.weixin.qq.com/pay/orderquery?access_token=xxxxxx

URL中的参数只包含目前微信公众平台凭证access_token,而订单查询的真正数据是放在PostData中的,格式如下:

<span>{
    </span>"appid" : "wwwwb4f85f3a797777",
    "package" : "out_trade_no=11122&partner=1900090055&sign=4e8d0df3da0c3d0df38f",
    "timestamp" : "1369745073",
    "app_signature" : "53cca9d47b883bd4a5c85a9300df3da0cb48565c",
    "sign_method" : "sha1"<span>
}</span>
Nach dem Login kopieren

上述内容参数说明如表所示。

参数

说明

appid

公众平台账户的AppId;

package

查询订单的关键信息数据,包含第三方唯一订单号out_trade_no、财付通商户身仹标识partner(即前文所述的partnerid)、签名sign,其中sign是对参数字典序排序并使用&联合起来,最后加上&key=partnerkey(唯一分配),进行md5运算,再转成全大写,最终得到sign

timestamp

linux时间戳;

app_signature

根据支付签名(paySign)生成方法中所讲的签名方式生成的,参加签名字段为:appid、appkey、package、timestamp;

sign_method

签名方法(不计入签名生成);

二、实现细节

1. 获得access token

这个很容易,参考微信公众平台开发(26) ACCESS TOKEN

代码如下:

<span>1</span> <span>$appid</span> = "wx0000000000000000"<span>;
</span><span>2</span> <span>$appsecret</span> = "e76050733c695748537fc4d4c21d0e2c"<span>;
</span><span>3</span> <span>$url</span> = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=<span>$appid</span>&secret=<span>$appsecret</span>"<span>;
</span><span>4</span> <span>$result</span> = https_request(<span>$url</span><span>);
</span><span>5</span> <span>$jsoninfo</span> = json_decode(<span>$result</span>, <span>true</span><span>);
</span><span>6</span> <span>$access_token</span> = <span>$jsoninfo</span>["access_token"];
Nach dem Login kopieren

2. 参数生成

appid: 直接赋值

timestamp:程序直接获取

<span>$timestamp</span> = <span>time</span>();
Nach dem Login kopieren

sign_method:这里为sha1

难点1:package 值的获得

先要获得sign

sign是out_trade_no,partner,key(partnerkey)三项信息的字典序排序,再MD5运算,再转为大写

<span>$sign</span>= <span>strtoupper</span>(<span>md5</span>("out_trade_no=JfuKdiBig4zZnE4n&partner=1234567890&key=ebf5cf381de2d716d432bfda34fa9e57"));
Nach dem Login kopieren

package 是查询订单的关键信息数据,包含第三方唯一订单号 out_trade_no、财付通商户身仹标识 partner(即前文所述的 partnerid) 、签名 sign

<span>$package</span> = "out_trade_no=JfuKdiBig4zZnE4n&partner=1234567890&sign=".<span>$sign</span>;
Nach dem Login kopieren

难点2:获得app_signature

app_signature 依然是根据支付签名(paySign)生成方法中所讲的签名方式生成的,参加签名字段为:appid、appkey、package、timestamp;

<span>$obj</span>['appid']          = "wx0000000000000000"<span>;
</span><span>$obj</span>['appkey']         = "8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6k"<span>;
</span><span>$obj</span>['package']        = <span>$package</span><span>;
</span><span>$obj</span>['timestamp']      = <span>$timestamp</span><span>;
</span><span>$WxPayHelper</span> = <span>new</span><span> WxPayHelper();
</span><span>//</span><span>get_biz_sign函数受保护,需要先取消一下,否则会报错</span>
<span>$app_signature</span>  = <span>$WxPayHelper</span>->get_biz_sign(<span>$obj</span>);
Nach dem Login kopieren

这样各项参数都获得了

3.提交查询

<span>$jsonmenu</span> = '<span>
{
    "appid" : "wx0000000000000000",
    "package" : "</span>'.<span>$package</span>.'<span>",
    "timestamp" : "</span>'.<span>$timestamp</span>.'<span>",
    "app_signature" : "</span>'.<span>$app_signature</span>.'<span>",
    "sign_method" : "sha1"
}
</span>'<span>;

</span><span>$url</span> = "https://api.weixin.qq.com/pay/orderquery?access_token=".<span>$access_token</span><span>;
</span><span>$result</span> = https_request(<span>$url</span>, <span>$jsonmenu</span><span>);
</span><span>var_dump</span>(<span>$result</span>);
Nach dem Login kopieren

完整代码如下所示:

<span> 1</span> <span>include_once</span>("WxPayHelper.php"<span>);
</span><span> 2</span> 
<span> 3</span> <span>//</span><span>1. 获取access token</span>
<span> 4</span> <span>$appid</span> = "wx0000000000000000"<span>;
</span><span> 5</span> <span>$appsecret</span> = "e76050733ce76050733ce76050733cdd"<span>;
</span><span> 6</span> <span>$url</span> = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=<span>$appid</span>&secret=<span>$appsecret</span>"<span>;
</span><span> 7</span> <span>$result</span> = https_request(<span>$url</span><span>);
</span><span> 8</span> <span>$jsoninfo</span> = json_decode(<span>$result</span>, <span>true</span><span>);
</span><span> 9</span> <span>$access_token</span> = <span>$jsoninfo</span>["access_token"<span>];
</span><span>10</span> 
<span>11</span> 
<span>12</span> <span>//</span><span>2.准备参数</span>
<span>13</span> <span>$timestamp</span> = <span>time</span><span>();
</span><span>14</span> <span>$sign</span>= <span>strtoupper</span>(<span>md5</span>("out_trade_no=JfuKdiBig4zZnE4n&partner=1234567890&key=asdfasdfasdfasdfasdfasdfasdfasdf"<span>));
</span><span>15</span> <span>$package</span> = "out_trade_no=JfuKdiBig4zZnE4n&partner=1234567890&sign=".<span>$sign</span><span>;
</span><span>16</span> 
<span>17</span> <span>//</span><span>2.1构造最麻烦的app_signature</span>
<span>18</span> <span>$obj</span>['appid']          = "wx0000000000000000"<span>;
</span><span>19</span> <span>$obj</span>['appkey']         = "8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6k"<span>;
</span><span>20</span> <span>$obj</span>['package']        = <span>$package</span><span>;
</span><span>21</span> <span>$obj</span>['timestamp']      = <span>$timestamp</span><span>;
</span><span>22</span> <span>$WxPayHelper</span> = <span>new</span><span> WxPayHelper();
</span><span>23</span> <span>//</span><span>get_biz_sign函数受保护,需要先取消一下,否则会报错</span>
<span>24</span> <span>$app_signature</span>  = <span>$WxPayHelper</span>->get_biz_sign(<span>$obj</span><span>);
</span><span>25</span> 
<span>26</span> <span>//</span><span>3. 将构造的json提交给微信服务器,查询</span>
<span>27</span> <span>$jsonmenu</span> = '
<span>28</span> <span>{
</span><span>29</span> <span>    "appid" : "wx0000000000000000",
</span><span>30</span>     "package" : "'.<span>$package</span>.'<span>",
</span><span>31</span>     "timestamp" : "'.<span>$timestamp</span>.'<span>",
</span><span>32</span>     "app_signature" : "'.<span>$app_signature</span>.'<span>",
</span><span>33</span> <span>    "sign_method" : "sha1"
</span><span>34</span> <span>}
</span><span>35</span> '<span>;
</span><span>36</span> 
<span>37</span> <span>$url</span> = "https://api.weixin.qq.com/pay/orderquery?access_token=".<span>$access_token</span><span>;
</span><span>38</span> <span>$result</span> = https_request(<span>$url</span>, <span>$jsonmenu</span><span>);
</span><span>39</span> <span>var_dump</span>(<span>$result</span><span>);
</span><span>40</span> 
<span>41</span> <span>function</span> https_request(<span>$url</span>, <span>$data</span> = <span>null</span><span>){
</span><span>42</span>     <span>$curl</span> =<span> curl_init();
</span><span>43</span>     curl_setopt(<span>$curl</span>, CURLOPT_URL, <span>$url</span><span>);
</span><span>44</span>     curl_setopt(<span>$curl</span>, CURLOPT_SSL_VERIFYPEER, <span>FALSE</span><span>);
</span><span>45</span>     curl_setopt(<span>$curl</span>, CURLOPT_SSL_VERIFYHOST, <span>FALSE</span><span>);
</span><span>46</span>     <span>if</span> (!<span>empty</span>(<span>$data</span><span>)){
</span><span>47</span>         curl_setopt(<span>$curl</span>, CURLOPT_POST, 1<span>);
</span><span>48</span>         curl_setopt(<span>$curl</span>, CURLOPT_POSTFIELDS, <span>$data</span><span>);
</span><span>49</span> <span>    }
</span><span>50</span>     curl_setopt(<span>$curl</span>, CURLOPT_RETURNTRANSFER, 1<span>);
</span><span>51</span>     <span>$output</span> = curl_exec(<span>$curl</span><span>);
</span><span>52</span>     curl_close(<span>$curl</span><span>);
</span><span>53</span>     <span>return</span> <span>$output</span><span>;
</span><span>54</span> }
Nach dem Login kopieren

三、订单结果

上述程序执行后,获得订单结果如下

<span>{
    </span>"errcode": 0<span>,
    </span>"errmsg": "ok"<span>,
    </span>"order_info"<span>: {
        </span>"ret_code": 0<span>,
        </span>"ret_msg": ""<span>,
        </span>"input_charset": "GBK"<span>,
        </span>"trade_state": "0"<span>,
        </span>"trade_mode": "1"<span>,
        </span>"partner": "1234567890"<span>,
        </span>"bank_type": "CMB_FP"<span>,
        </span>"bank_billno": "201405273540085997"<span>,
        </span>"total_fee": "1"<span>,
        </span>"fee_type": "1"<span>,
        </span>"transaction_id": "1218614901201405273313473135"<span>,
        </span>"out_trade_no": "JfuKdiBig4zZnE4n"<span>,
        </span>"is_split": "false"<span>,
        </span>"is_refund": "false"<span>,
        </span>"attach": ""<span>,
        </span>"time_end": "20140527194139"<span>,
        </span>"transport_fee": "0"<span>,
        </span>"product_fee": "1"<span>,
        </span>"discount": "0"<span>,
        </span>"rmb_total_fee": ""<span>
    }
}</span>
Nach dem Login kopieren

各个字段的含义如表所示。

参数

说明

ret_code

查询结果状态码,0表明成功,其他表明错误;

ret_msg

查询结果出错信息;

input_charset

返回信息中的编码方式;

trade_state

订单状态,0为成功,其他为失败;

trade_mode

交易模式,1为即时到帐,其他保留;

partner

财付通商户号,即前文的partnerid;

bank_type

银行类型;

bank_billno

银行订单号;

total_fee

总金额,单位为分;

fee_type

币种,1为人民币;

transaction_id

财付通订单号;

out_trade_no

第三方订单号;

is_split

是否分账,false为无分账,true为有分账;

is_refund

是否退款,false为无退款,ture为退款;

attach

商户数据包,即生成订单package时商户填入的attach;

time_end

支付完成时间;

transport_fee

物流费用,单位为分;

product_fee

物品费用,单位为分;

discount

折扣价格,单位为分;

rmb_total_fee

换算成人民币之后的总金额,单位为分,一般看total_fee即可。

如果程序有误,会在errcodeerrmsg描述出来

 

 

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/777156.htmlTechArticle本文介绍微信支付中订单查询功能的实现。 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/wxpay-order-query.html 一、订单查询 因为某一方...
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wenn Sie Ihr WeChat-Zahlungspasswort vergessen haben, wie können Sie es abrufen? Wenn Sie Ihr WeChat-Zahlungspasswort vergessen haben, wie können Sie es abrufen? Feb 23, 2024 pm 09:40 PM

In WeChat können Benutzer ihr Zahlungspasswort eingeben, um Einkäufe zu tätigen. Aber wie können sie ihr Zahlungspasswort abrufen, wenn sie es vergessen? Benutzer müssen zu „Meine Dienste – Wallet – Zahlungseinstellungen“ gehen, um ihr Zahlungspasswort wiederherzustellen, wenn sie es vergessen. In dieser Einführung erfahren Sie, wie Sie Ihr Zahlungskennwort abrufen können, wenn Sie es vergessen haben. Im Folgenden finden Sie eine detaillierte Einführung. Schauen Sie also mal rein! Tutorial zur WeChat-Nutzung. Wie finde ich das WeChat-Zahlungspasswort? Antwort: „Meine Service-Wallet-Zahlungseinstellungen – Zahlungspasswort vergessen“: 1. Klicken Sie zunächst auf „Mein“. 2. Klicken Sie auf den Dienst darin. 3. Klicken Sie auf die darin enthaltene Brieftasche. 4. Suchen Sie nach den Zahlungseinstellungen. 5. Klicken Sie auf Zahlungspasswort vergessen. 6. Geben Sie Ihre eigenen Informationen zur Überprüfung ein. 7. Geben Sie anschließend das neue Zahlungspasswort ein, um es zu ändern.

Was soll ich tun, wenn ich mein WeChat-Zahlungspasswort vergesse? Was soll ich tun, wenn ich mein WeChat-Zahlungspasswort vergesse? Jan 08, 2024 pm 05:02 PM

Lösung zum Vergessen des WeChat-Zahlungskennworts: 1. Öffnen Sie die WeChat-App und klicken Sie auf „I“ in der unteren rechten Ecke, um die Seite des persönlichen Zentrums aufzurufen. 2. Klicken Sie auf der Seite des persönlichen Zentrums auf „Bezahlen“, um die Zahlungsseite aufzurufen Klicken Sie auf der Zahlungsseite oben rechts auf „…“, um die Zahlungsverwaltungsseite aufzurufen. 4. Suchen Sie auf der Zahlungsverwaltungsseite nach „Zahlungskennwort vergessen“ und klicken Sie darauf Nach erfolgreicher Überprüfung können Sie die Methode „Abrufen durch Wischen Ihres Gesichts“ oder „Abrufen durch Verifizieren der Bankkarteninformationen“ wählen, um Ihr Passwort usw. abzurufen.

So richten Sie die WeChat-Zahlung für Meituan Takeout ein. So richten Sie die WeChat-Zahlung ein So richten Sie die WeChat-Zahlung für Meituan Takeout ein. So richten Sie die WeChat-Zahlung ein Mar 12, 2024 pm 10:34 PM

In der Meituan-App zum Mitnehmen werden zahlreiche Lebensmittel- und Snackläden angeboten, und alle Mobiltelefonbenutzer melden sich über ihre Konten an. Fügen Sie Ihre persönliche Lieferadresse und Kontaktnummer hinzu, um den bequemsten Abholservice zu genießen. Öffnen Sie die Startseite der Software, geben Sie Produktschlüsselwörter ein und suchen Sie online, um die entsprechenden Produktergebnisse zu finden, um zu kaufen und eine Bestellung aufzugeben. Die Plattform empfiehlt Ihnen außerdem Dutzende nahegelegener Restaurants mit guten Bewertungen basierend auf der Lieferadresse Der Shop kann auch verschiedene Zahlungsmethoden einrichten, um die Bestellung sofort abzuschließen. Es gibt auch rote Umschläge zum Mitnehmen Verschiedene Beträge zur Nutzung. Jetzt ist der Editor im Detail für Meituan-Takeout-Nutzer verfügbar. Wir zeigen Ihnen, wie Sie die WeChat-Zahlung einrichten. 1. Nachdem Sie das Produkt ausgewählt haben, senden Sie die Bestellung ab und klicken Sie auf Jetzt

So legen Sie die Abzugsreihenfolge für die WeChat-Zahlung fest So legen Sie die Abzugsreihenfolge für die WeChat-Zahlung fest Sep 06, 2023 am 11:11 AM

Schritte zum Festlegen der Abzugsreihenfolge für die WeChat-Zahlung: 1. Öffnen Sie die WeChat-App, klicken Sie auf die Benutzeroberfläche „Ich“, klicken Sie auf „Dienste“ und dann auf „Einziehen und Bezahlen“. 2. Klicken Sie auf „Verwendung priorisieren“. Zahlungsmethode“ unter dem Zahlungscode auf der Inkasso- und Zahlungsschnittstelle; 3. Wählen Sie die gewünschte bevorzugte Zahlungsmethode aus.

Kann Xianyu mit WeChat bezahlen? Wie wechselt man zur WeChat-Zahlungsmethode? Kann Xianyu mit WeChat bezahlen? Wie wechselt man zur WeChat-Zahlungsmethode? Mar 12, 2024 pm 12:19 PM

Wenn jeder nichts zu tun hat, wird er sich dafür entscheiden, die Xianyu-Plattform zu durchsuchen. Jeder kann feststellen, dass es auf dieser Plattform eine große Anzahl von Produkten gibt, die es jedem ermöglichen, verschiedene gebrauchte Produkte zu sehen Es gibt absolut kein Problem mit der Qualität dieser Produkte, sodass jeder sie mit Vertrauen kaufen kann. Die Preise sind sehr erschwinglich und es ist für Verkäufer dennoch durchaus möglich, sie persönlich kennenzulernen Solange alle ordnungsgemäß verhandeln, können Sie sich für die Durchführung von Transaktionen entscheiden, und wenn alle hier bezahlen, möchten sie die Zahlung über WeChat durchführen, aber es scheint, dass die Plattform dies nicht erlaubt um herauszufinden, wie die konkrete Situation ist. Xianyu

Muss WeChat Pay eine Bankkarte binden? Muss WeChat Pay eine Bankkarte binden? Nov 17, 2022 am 11:57 AM

WeChat Pay muss nicht an eine Bankkarte gebunden sein. WeChat-Zahlungen können ohne Bindung einer Bankkarte verwendet werden, vorausgesetzt, dass die Echtnamen-Authentifizierung durchgeführt wird, können Sie WeChat-Änderungen zum Versenden roter Umschläge, Überweisungen, Geldeinziehungen und WeChat-Zahlungen verwenden andere Operationen. Es ist zu beachten, dass WeChat kein Bargeld abheben kann, wenn es nicht an eine Bankkarte gebunden ist, und dass es Beschränkungen für Belege, Zahlungen, Überweisungen usw. gibt, mit einem Maximum von 200 Yuan für eine einzelne Transaktion und täglich und einem Maximum von 500 Yuan pro Monat.

So bezahlen Sie mit WeChat auf Alibaba_So bezahlen Sie mit WeChat auf Alibaba 1688 So bezahlen Sie mit WeChat auf Alibaba_So bezahlen Sie mit WeChat auf Alibaba 1688 Mar 20, 2024 pm 05:51 PM

Alibaba 1688 ist eine Einkaufs- und Großhandelswebsite, und die Artikel dort sind viel günstiger als bei Taobao. Wie nutzt Alibaba die WeChat-Zahlung? Der Herausgeber hat einige relevante Inhalte zusammengestellt, die Sie mit Ihnen teilen können. Freunde in Not können vorbeikommen und einen Blick darauf werfen. Wie nutzt Alibaba WeChat zum Bezahlen? Antwort: WeChat-Zahlung kann vorerst nicht verwendet werden gehen Sie zu [Alipay, gestaffelte Zahlung], Kassierer] kann ausgewählt werden;

Teilen Sie uns die Schritte zur Beantragung einer Rückerstattung mit WeChat Pay mit Teilen Sie uns die Schritte zur Beantragung einer Rückerstattung mit WeChat Pay mit Mar 25, 2024 pm 06:31 PM

1. Zuerst müssen wir die WeChat-App auf dem Mobiltelefon öffnen und dann klicken, um uns beim WeChat-Konto anzumelden, um die WeChat-Homepage aufzurufen. 2. Klicken Sie auf die Schaltfläche [Ich] in der unteren rechten Ecke der WeChat-Startseite und wählen Sie dann die Option [Zahlung] aus. Wir klicken, um die Zahlungsseite aufzurufen. 3. Nachdem Sie die Seite [Zahlung] aufgerufen haben, klicken Sie auf die Option [Wallet], um sie aufzurufen, und klicken Sie dann auf [Rechnung] in der oberen rechten Ecke der Seite [Wallet].

See all articles