j7-dev/woomp

無法開立藍新ezpay發票

Closed this issue · 12 comments

j7-dev commented

主要問題

EZPAY 電子發票自動開立問題
會產生 CURL 錯誤

測試情境:
商品: 訂閱商品(虛擬)
訂單狀態: 等待付款 -> 處理中

image

REF

EZPAY 電子發票 API:
https://inv.ezpay.com.tw/dw_files/info_api/EZP_INVI_1_2_1.pdf

WOOMP 依賴的lib
dennykuo/invoice-porter

錯誤訊息:
2023-11-04T01:31:52+00:00 ERROR Status transition of order #271 errored!

image

image

image

image

image

image

這邊代碼是
Version: "1.4"
image

這邊範例是
Version: "1.5"
image

$postData 資料如下

{
  "Version": "1.4",
  "RespondType": null,
  "TimeStamp": 1699066486,
  "MerchantOrderNo": "274_1699066486",
  "Status": 1,
  "Category": "B2C",
  "BuyerName": "\u5289\u54f2\u5b87",
  "BuyerAddress": "100TW\u81fa\u5317\u5e02\u4e2d\u6b63\u5340\u65b0\u5317\u5e02\u4e09\u91cd\u5340\u91cd\u967d\u8def\u4e00\u6bb586\u865f",
  "BuyerEmail": "j7.dev.gg@outlook.com",
  "CarrierType": 2,
  "CarrierNum": "j7.dev.gg%40outlook.com",
  "PrintFlag": "N",
  "TaxType": 1,
  "TaxRate": 5,
  "Amt": 19,
  "TaxAmt": 1,
  "TotalAmt": "20",
  "ItemName": "\u8a02\u95b1\u5546\u54c1",
  "ItemCount": "1",
  "ItemUnit": "\u4ef6",
  "ItemPrice": "20",
  "ItemAmt": "20",
  "KioskPrintFlag": 1
}

image

自動開立發票錯誤訊息回: 商店代號空白

payload:

{
  "Version": "1.4",
  "TimeStamp": "1699485182",
  "MerchantOrderNo": "274_1699485182",
  "Status": "1",
  "Category": "B2C",
  "BuyerName": "\u5289\u54f2\u5b87",
  "BuyerAddress": "100TW\u81fa\u5317\u5e02\u4e2d\u6b63\u5340\u65b0\u5317\u5e02\u4e09\u91cd\u5340\u91cd\u967d\u8def\u4e00\u6bb586\u865f",
  "BuyerEmail": "j7.dev.gg@outlook.com",
  "CarrierType": "2",
  "CarrierNum": "j7.dev.gg%40outlook.com",
  "PrintFlag": "N",
  "TaxType": "1",
  "TaxRate": "5",
  "Amt": "19",
  "TaxAmt": "1",
  "TotalAmt": "20",
  "ItemName": "\u8a02\u95b1\u5546\u54c1",
  "ItemCount": "1",
  "ItemUnit": "\u4ef6",
  "ItemPrice": "20",
  "ItemAmt": "20",
  "KioskPrintFlag": "1"
}

但是手動開立卻成功
image

手動開立成功的payload

{
  "Version": "1.4",
  "RespondType": "JSON",
  "TimeStamp": "1699486182",
  "MerchantOrderNo": "272_1699486182",
  "Status": "1",
  "Category": "B2C",
  "BuyerName": "\u5289\u54f2\u5b87",
  "BuyerAddress": "100TW\u81fa\u5317\u5e02\u4e2d\u6b63\u5340\u65b0\u5317\u5e02\u4e09\u91cd\u5340\u91cd\u967d\u8def\u4e00\u6bb586\u865f",
  "BuyerEmail": "j7.dev.gg@outlook.com",
  "CarrierType": "2",
  "CarrierNum": "j7.dev.gg%40outlook.com",
  "PrintFlag": "N",
  "TaxType": "1",
  "TaxRate": "5",
  "Amt": "19",
  "TaxAmt": "1",
  "TotalAmt": "20",
  "ItemName": "\u8a02\u95b1\u5546\u54c1",
  "ItemCount": "1",
  "ItemUnit": "\u4ef6",
  "ItemPrice": "20",
  "ItemAmt": "20",
  "KioskPrintFlag": "1"
}

結論

payload 沒有問題,version就算帶1.4也會過
問題在於 整個 config 沒有吃到,所以整個 api url 是 null

image

解法

image

小尷尬的地方是
這個錯誤是別人的套件的BUG
我是無法直接版控他的東西
(其實可以 但這樣不正常)

一般正常情況會有

  1. 我發ISSUE給原作者 叫他改 但太慢了 而且不知道他會不會回
  2. 我把他套件clone下來修改 自己維護

我決定走2 不過我比較少開PHP library 有空再看怎麼開
暫時處置 把所有library版控進去

Enhance

雖然可以開發票,但是與原本用戶預期行為不同
image
image

DEBUG

檢查這兩行
image

$response

{
  "success": false,  // ⬅️ WTF is this ? 種種跡象表明我成功,success 卻 false ?
  "message": "發票開立成功",
  "code": "SUCCESS",
  "result": {
    "CheckCode": "2B3BEA8C993305780B511AE1744E942A623375EC1F578EF6E831C1B999486F7A",
    "MerchantID": "336835608",
    "MerchantOrderNo": "344_1699576050",
    "InvoiceNumber": "VQ02725076",
    "TotalAmt": 20,
    "InvoiceTransNo": "23111008273390773",
    "RandomNum": "3812",
    "CreateTime": "2023-11-10 08:27:33",
    "BarCode": "11212VQ027250763812",
    "QRcodeL": "VQ027250761121110381200000013000000140000000094047751DBUI5q+Mfa6fxGxjW1YzaQ==:**********:1:1:1:訂購商品:1:20",
    "QRcodeR": "**"
  },
  "raw": {
    "status": "SUCCESS",
    "message": "發票開立成功",
    "result": {
      "CheckCode": "2B3BEA8C993305780B511AE1744E942A623375EC1F578EF6E831C1B999486F7A",
      "MerchantID": "336835608",
      "MerchantOrderNo": "344_1699576050",
      "InvoiceNumber": "VQ02725076",
      "TotalAmt": 20,
      "InvoiceTransNo": "23111008273390773",
      "RandomNum": "3812",
      "CreateTime": "2023-11-10 08:27:33",
      "BarCode": "11212VQ027250763812",
      "QRcodeL": "VQ027250761121110381200000013000000140000000094047751DBUI5q+Mfa6fxGxjW1YzaQ==:**********:1:1:1:訂購商品:1:20",
      "QRcodeR": "**"
    }
  }
}

$this->invoice

{
  "config": null,
  "isProduction": true,
  "response": {
    "success": false,
    "message": "發票開立成功",
    "code": "SUCCESS",
    "result": {
      "CheckCode": "2B3BEA8C993305780B511AE1744E942A623375EC1F578EF6E831C1B999486F7A",
      "MerchantID": "336835608",
      "MerchantOrderNo": "344_1699576050",
      "InvoiceNumber": "VQ02725076",
      "TotalAmt": 20,
      "InvoiceTransNo": "23111008273390773",
      "RandomNum": "3812",
      "CreateTime": "2023-11-10 08:27:33",
      "BarCode": "11212VQ027250763812",
      "QRcodeL": "VQ027250761121110381200000013000000140000000094047751DBUI5q+Mfa6fxGxjW1YzaQ==:**********:1:1:1:訂購商品:1:20",
      "QRcodeR": "**"
    },
    "raw": {
      "status": "SUCCESS",
      "message": "發票開立成功",
      "result": {
        "CheckCode": "2B3BEA8C993305780B511AE1744E942A623375EC1F578EF6E831C1B999486F7A",
        "MerchantID": "336835608",
        "MerchantOrderNo": "344_1699576050",
        "InvoiceNumber": "VQ02725076",
        "TotalAmt": 20,
        "InvoiceTransNo": "23111008273390773",
        "RandomNum": "3812",
        "CreateTime": "2023-11-10 08:27:33",
        "BarCode": "11212VQ027250763812",
        "QRcodeL": "VQ027250761121110381200000013000000140000000094047751DBUI5q+Mfa6fxGxjW1YzaQ==:**********:1:1:1:訂購商品:1:20",
        "QRcodeR": "**"
      }
    }
  },
  "merchantID": "336835608",
  "hashKey": "zLbagjxSpN6YIrTTWmjBcfMbRJVFOzUD",
  "hashIV": "Pqnp1lInbeahtWaC"
}

解法

image

更新 仍然有人網站開立失敗

image

問題:
image

正常應該會長得像這樣
但他輸出出來是 空 Array

Array
        (
            [_ezpay_invoice_type] => individual
            [_ezpay_invoice_individual] => ezPay 電子發票載具
        )

正常的訂購流程是
結帳頁 > 填資料(這時候就要填發票資訊了 個人/公司) > 結帳 (將發票資訊存入 order meta)
他這筆訂單 我不確定有沒有這樣正確走流程 我猜沒有!?
因為我看那筆發票資訊就是空的 沒存入

image

解法

後台手動開發票時 ajax 應該要帶參數過去
image

然後 php 要去接,存入 order meta $order->update_meta_data('_ezpay_invoice_data', $invoice_data);
image

綠界的 MetaBox 那邊一樣沒帶資料

發票類型是否應該要顯示
image