Jadual Kandungan
一、订单查询
二、实现细节
1. 获得access token
2. 参数生成
3.提交查询
三、订单结果
Rumah pembangunan bahagian belakang tutorial php 微信支付开发(5) 订单查询_PHP教程

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

Jul 13, 2016 am 10:29 AM
Tutorial pembangunan pembangunan WeChat WeChat Pay

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

作者:方倍工作室

地址: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>
Salin selepas log masuk

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

参数

说明

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"];
Salin selepas log masuk

2. 参数生成

appid: 直接赋值

timestamp:程序直接获取

<span>$timestamp</span> = <span>time</span>();
Salin selepas log masuk

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"));
Salin selepas log masuk

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

<span>$package</span> = "out_trade_no=JfuKdiBig4zZnE4n&partner=1234567890&sign=".<span>$sign</span>;
Salin selepas log masuk

难点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>);
Salin selepas log masuk

这样各项参数都获得了

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>);
Salin selepas log masuk

完整代码如下所示:

<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> }
Salin selepas log masuk

三、订单结果

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

<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>
Salin selepas log masuk

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

参数

说明

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 一、订单查询 因为某一方...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mendapatkan semula kata laluan pembayaran WeChat anda jika anda terlupa Bagaimana untuk mendapatkan semula kata laluan pembayaran WeChat anda jika anda terlupa Feb 23, 2024 pm 09:40 PM

Dalam WeChat, pengguna boleh memasukkan kata laluan pembayaran mereka untuk membuat pembelian, tetapi bagaimanakah mereka mendapatkan kata laluan pembayaran mereka jika mereka terlupa? Pengguna perlu pergi ke My-Services-Dompet-Tetapan Pembayaran-untuk mendapatkan semula kata laluan pembayaran mereka jika mereka terlupa. Pengenalan tentang cara mendapatkan semula kata laluan pembayaran anda jika anda terlupa kata laluan ini akan memberitahu anda kaedah operasi khusus Berikut ialah pengenalan terperinci, jadi sila lihat! Tutorial penggunaan WeChat. Bagaimana untuk mencari kata laluan pembayaran WeChat jika anda terlupa. 2. Klik pada perkhidmatan di dalam. 3. Klik pada dompet di dalam. 4. Cari tetapan pembayaran. 5. Klik Lupa kata laluan pembayaran. 6. Masukkan maklumat anda sendiri untuk pengesahan. 7. Kemudian masukkan kata laluan pembayaran baharu untuk menukarnya.

Apakah yang perlu saya lakukan jika saya terlupa kata laluan pembayaran WeChat saya? Apakah yang perlu saya lakukan jika saya terlupa kata laluan pembayaran WeChat saya? Jan 08, 2024 pm 05:02 PM

Penyelesaian untuk melupakan kata laluan pembayaran WeChat: 1. Buka APP WeChat, klik "I" di sudut kanan bawah untuk memasuki halaman pusat peribadi 2. Dalam halaman pusat peribadi, klik "Bayar" untuk memasuki halaman pembayaran; halaman pembayaran , klik "..." di sudut kanan atas untuk memasuki halaman pengurusan pembayaran; 4. Dalam halaman pengurusan pembayaran, cari dan klik "Terlupa kata laluan pembayaran" 5. Ikuti arahan halaman dan masukkan maklumat peribadi untuk pengesahan identiti Selepas pengesahan berjaya, anda boleh Pilih "Leret wajah anda untuk mendapatkan semula" atau "Sahkan maklumat kad bank untuk mendapatkan semula" untuk mendapatkan kata laluan anda, dsb.

Bagaimana untuk menyediakan pembayaran WeChat untuk Meituan Takeout Bagaimana untuk menyediakan pembayaran WeChat Bagaimana untuk menyediakan pembayaran WeChat untuk Meituan Takeout Bagaimana untuk menyediakan pembayaran WeChat Mar 12, 2024 pm 10:34 PM

Terdapat banyak kedai makanan dan makanan ringan yang disediakan dalam aplikasi bawa pulang Meituan, dan semua pengguna telefon mudah alih log masuk melalui akaun mereka. Tambah alamat penghantaran peribadi anda dan nombor telefon untuk menikmati perkhidmatan bawa pulang yang paling mudah. Buka halaman utama perisian, masukkan kata kunci produk, dan cari dalam talian untuk mencari hasil produk yang sepadan Leret ke atas dan ke bawah untuk memilih dan membuat pesanan Platform ini juga akan mengesyorkan berpuluh-puluh restoran berdekatan dengan ulasan tinggi berdasarkan alamat penghantaran yang diberikan oleh pengguna. Kedai juga boleh menyediakan kaedah pembayaran yang berbeza Anda boleh membuat pesanan dengan satu klik untuk menyelesaikan pesanan dengan serta-merta dan kelajuan penghantaran adalah sangat cepat amaun untuk digunakan Sekarang editor dalam talian secara terperinci untuk pengguna takeout Meituan Kami menunjukkan kepada anda cara untuk menyediakan pembayaran WeChat. 1. Selepas memilih produk, serahkan pesanan dan klik Sekarang

Bagaimana untuk menetapkan susunan potongan untuk pembayaran WeChat Bagaimana untuk menetapkan susunan potongan untuk pembayaran WeChat Sep 06, 2023 am 11:11 AM

Langkah-langkah untuk menetapkan susunan potongan untuk pembayaran WeChat: 1. Buka APP WeChat, klik pada antara muka "Saya", klik pada "Perkhidmatan", dan kemudian klik pada "Resit dan Pembayaran" 2. Klik pada "Utamakan Penggunaan Ini Kaedah Pembayaran" di bawah kod pembayaran pada antara muka pengumpulan dan pembayaran; 3. Pilih kaedah pembayaran pilihan yang anda perlukan.

Bolehkah Xianyu membayar dengan WeChat Bagaimana untuk menukar kepada kaedah pembayaran WeChat? Bolehkah Xianyu membayar dengan WeChat Bagaimana untuk menukar kepada kaedah pembayaran WeChat? Mar 12, 2024 pm 12:19 PM

Apabila semua orang tiada apa-apa untuk dilakukan, mereka akan memilih untuk menyemak imbas platform Xianyu Semua orang boleh mendapati bahawa terdapat sejumlah besar produk pada platform ini, yang membolehkan semua orang melihat pelbagai produk terpakai. produk tangan, sama sekali tidak ada masalah dengan kualiti produk ini, jadi semua orang boleh membelinya dengan yakin Harganya sangat berpatutan, dan mereka masih membenarkan semua orang untuk bersemuka dengan produk ini untuk berkomunikasi dan menjalankan beberapa operasi tawar-menawar harga Selagi semua orang berunding dengan betul, maka anda boleh memilih untuk menjalankan transaksi, dan apabila semua orang membayar di sini, mereka ingin membuat pembayaran WeChat, tetapi nampaknya platform Ia tidak dibenarkan editor untuk mengetahui situasi tertentu. Xianyu

Berkongsi langkah untuk memohon bayaran balik dengan WeChat Pay Berkongsi langkah untuk memohon bayaran balik dengan WeChat Pay Mar 25, 2024 pm 06:31 PM

1. Mula-mula, kita perlu membuka APP WeChat pada telefon mudah alih, dan kemudian klik untuk log masuk ke akaun WeChat, supaya kita memasuki halaman utama WeChat. 2. Klik butang [Saya] di penjuru kanan sebelah bawah halaman utama WeChat, kemudian pilih pilihan [Pembayaran] Kami klik untuk memasuki halaman pembayaran. 3. Selepas memasuki halaman [Pembayaran], klik pilihan [Dompet] untuk masuk dan klik [Bil] di penjuru kanan sebelah atas halaman [Dompet].

Adakah WeChat Pay perlu mengikat kad bank? Adakah WeChat Pay perlu mengikat kad bank? Nov 17, 2022 am 11:57 AM

WeChat Pay tidak perlu terikat pada kad bank. Pembayaran WeChat boleh digunakan tanpa mengikat kad bank, dengan syarat pengesahan nama sebenar dijalankan Selagi pengesahan nama sebenar diluluskan, anda boleh menggunakan pertukaran WeChat untuk menghantar sampul merah, memindahkan, mengumpul wang, pembayaran WeChat dan. operasi lain. Perlu diingat bahawa WeChat tidak boleh mengeluarkan wang tunai jika ia tidak terikat pada kad bank, dan terdapat had pada resit, pembayaran, pemindahan, dll., dengan maksimum 200 yuan untuk satu transaksi dan setiap hari, dan maksimum 500 yuan sebulan.

Bagaimana untuk menyediakan pembayaran WeChat pada Didi Chuxing Bagaimana untuk menyediakan pembayaran WeChat Bagaimana untuk menyediakan pembayaran WeChat pada Didi Chuxing Bagaimana untuk menyediakan pembayaran WeChat Mar 13, 2024 pm 01:22 PM

Aplikasi Didi Chuxing menyediakan lebih banyak kemudahan untuk perjalanan harian semua orang. Buka halaman utama perisian, masukkan titik permulaan dan destinasi mengikut jadual perjalanan peribadi anda, dan bebas memilih daripada kenderaan dengan julat harga yang berbeza terus di bawah tiba di lokasi yang ditetapkan secepat mungkin Untuk lokasi, hanya semak nombor telefon bimbit anda sebelum menaiki bas Sudah tentu, terdapat banyak cara untuk membayar tambang, termasuk WeChat dan Alipay, tetapi semua orang biasanya menggunakan WeChat. Mudah untuk menyediakan pembayaran dengan satu klik Sekarang editor dalam talian untuk membayar Didi dengan berhati-hati satu demi satu pengguna membawa kaedah menyediakan pembayaran WeChat. 1. Kami menggunakan telefon bimbit

See all articles