OrderProcess 指令
這個指令會提交一份訂單。
訂單必須被 OrderPrepare 鎖定。一旦 OrderProcess 指令開始執行,
即無法使用 OrderCancel 來取消訂單。

參數值
- http://host_name/path/
- (必要)WebSphere Commerce Server 和架構路徑的完整名稱。
- forUser
- 將代替其執行指令之使用者的登入 ID;只有具備處理訂單權限的人才可指定這個參數。
- forUserId
- 與 forUser 相同,但卻是 USERS 表格中之內部使用者 ID 所指的使用者。
- langId
- 設定或重設在階段作業期間的屬意語言;
有關商店的支援語言可在 STORELANG 表格中找到。
- storeId
- 要對其下訂單的商店參考號碼。系統不處理此值,除非在
訂單解析之前發生錯誤。
只有在呼叫正確商店的異常處理程式時才會用到它。
- orderId
- (必要)訂單的參考號碼。
- billtoAddressId
- 帳單地址的參考號碼。
- field1、field2 與 field3
- 自訂欄位
- notifyMerchant
- 當訂單處理好之後,應不應該通知商店。
1=是
0=否
- notifyShopper
- 當訂單處理好之後,應不應該通知客戶。
1=是
0=否
- quoteExpiredURL
- 指出一旦協定中的訂單總金額因 quoteExpiryPolicy 參數所指定的過期原則而過期時,
將重新導向至哪個 URL。
- quoteExpiryPolicy
- 定義如果訂單總金額過期,或訂單項目的供貨中心在庫存配置期間做了變更時,
指令的行為。如果目前的時間大於或等於訂單前次更新的時間戳記加上
STORE 表格的
QUOTEGOODFOR 直欄所指定的秒數時,訂單總金額即屬過期。
這個參數有三個可能值:
- alwaysProceed=在重新計算過訂單總金額之後,固定要繼續處理訂單。
- stopOnBiggerTotal=如果重新計算的訂單總金額沒有變或小於過期訂單總金額,
就繼續處理訂單。不然的話,會重新導向到 quoteExpiredUrl 所指定的 URL。
- neverProceed=固定重新導向到 quoteExpiredUrl 參數指定的 URL。
- notifyOrderSubmitted
- 指定當訂單順利提交供進行處理後,是否要通知客戶。
1=是
0=否(預設值)
- availabilityChangeURL
- 指定當預估的可用時間加上任何訂單項目的出貨偏移移至未來(因配置或將庫存用在補貨的結果)
的時間超過 maxAvailabilityChange 參數所指定的間隔時,要重新導向的 URL。
如果沒有啟用 ATP 庫存配置,系統不處理這個參數。
- maxAvailabilityChange
- 以秒數為單位指定在 availabilityChangeURL 參數說明中提到的時間間隔。
預設值是 3600(1 個小時)。如果沒有指定 availabilityChangeURL 參數,或沒有啟用
ATP 庫存配置,系統將不處理這個參數。
- noInventoryURL
- 指定如果無法配置訂單中的任何訂單項目,或無法補貨時,要重新導向的 URL。
如果沒有啟用 ATP 庫存配置,系統不處理這個參數。
- tcId
- 條款物件的識別碼(請參考 TERMCOND 表格)。
如果有指定這個參數,並且這個參數指的是 PaymentTC,同時如果該 PaymentTC
指定了 memberId 和地址 nickName(請參考 PaymentTC 對映),將會使用
memberId 和地址 nickName 來決定帳單地址,在這個情況下,系統不處理
billToAddressId 參數。
付款的注意事項
OrderProcess 指令本身不會處理付款。如果要處理付款,請使用 DoPayment 作業指令實作的 DoPaymentCmd 介面類別。
從 OrderProcess 傳遞給這個指令的參數可以是任何東西,不過,它們通常會施行信用卡資訊。
WebSphere Commerce 有包括 OH 作業指令的兩個實作類別:
DoPaymentCmdImpl
類別和 DoPaymentMPFCmdImpl
類別。DoPaymentCmdImpl 類別是一項範例施行,用來顯示使用者如何撰寫 DoPayment 作業指令來使用 OrderProcess 指令。
DoPaymentMPFCmdImpl 類別是標準 DoPaymentCmd 實作類別,它的設計是要供 IBM Websphere Payment Manager 第 3.1 版使用,
它支援這個版次的 WebSphere Commerce Business Edition 所引進的企業消費型商務功能。
訂單通知的注意事項
如果您必須架構訂單通知,您必須執行下列動作:
- 啟用出埠傳訊。
- 建立訊息撰寫範本,以撰寫訂單通知訊息。
範例 1
下列指令要處理參考號碼為 3 之訂單的下單:
http://myhostname/webapp/wcs/stores/servlet/OrderProcess?orderId=3
範例 2
假設已設定好 Payment Manager,這個指令會將客戶的付款資訊傳遞給 Payment Manager。policyId=200 參數會參照商店模型預設用於 Payment Manager 的 OfflineCard 方法。
http://myhostname/webapp/wcs/stores/servlet/OrderProcess?storeId=34
&orderId=556677&policy=200&cardBrand=Visa
&cardNumber=41111111111111111&cardExpiryMonth=12&cardExpiryYear=2001
附註:payMethodId 參數只供與舊版相容之用。
如果是新的 Payment Manager Cassettes 和新的企業消費型商務功能,請改用 policyId 參數(如範例 2 所示)。
如果需要定義的付款原則清單,請參閱下面的相關鏈結。
DoPaymentMPFCmdImpl 類別支援一個稱為 tcld 的附加參數,用來指定訂單要用的付款條款的 ID。
條款必須是訂購項目的相關合約中所指定的一般付款條款。
為了要協助選取一般的付款條款 JSP 檔,請使用 UsablePaymentTCListDataBean。
如果 OrerItems 使用的任何合約有和付款條款相關聯時,tcld 是強制的參數。
規則
- OrderProcess 指令呼叫 ProcessOrder 作業指令,以執行下列事項:
- 如果訂單沒有鎖定(指出訂單自從由 OrderPrepare 指令備妥以來,從未做過變更),
或如果訂單狀態不是 'P'、'I'、'E'、'W'、'N' 或 'B',就會擲出
ECApplicationException 異常。
- 當 STORE 表格中的 QUOTEGOODFOR
直欄值不是 NULL 時,並且有指定 quoteExpiryPolicy 和 quoteExpiredURL
兩個參數,同時訂單狀態為 'P'、'I'、'W' 或 'N' 時,指令會檢查訂單的前次更新時間戳記。
如果目前的時間大於或等於前次更新時間戳記加上 QUOTEGOODFOR 直欄指定的秒數,
OrderProcess 會呼叫 PrepareOrder
作業指令,來重新整理訂單金額,然後根據 quoteExpiryPolicy 的值,執行下列其中一項:
- 如果重新計算的訂單合計沒有改變,且 quoteExpiryPolicy 參數不容許,這時會繼續正常運作。
- 如果重新計算的訂單合計比較小,且 quoteExpiryPolicy 參數不容許,這時會繼續正常運作。
- 如果重新計算的訂單合計比較大,且 quoteExpiryPolicy 參數容許,這時會繼續正常運作。
- 否則,請勿處理訂單,而要重新導向至 quoteExpiredURL 參數所指定的 URL
- 如果有啟用 ATP 庫存,則:
- 會呼叫 AllocateInventory
作業指令,配置尚未配置或補貨,或自從其上一次配置或補貨以來,
已做變更的任何訂單項目,如果無法配置,就將其建立成補貨訂單。
- 如果有任何訂單項目無法配置或建立成補貨訂單:
- 如果有指定 noInventoryURL 參數,指令會傳回一個重新導向至該 URL。
- 不然的話,訂單狀態會改成 L,且指令會傳回。
- 如果有指定 availabilityChangeURL 參數,並且任何訂單項目的預估可用時間
如果移至比其在配置或建立補貨訂單時,以 maxAvailabilityChange 參數所指定的時間更晚時,
指令會傳回一個重新導向至該 URL。
- 如果 AllocateInventory 作業指令解除鎖定了訂單,指出訂單項目的供貨中心已做變更,則:
- 會呼叫 ReprepareOrder
作業指令,重新計算貨運費和稅金金額,並鎖定訂單。如果這個計算結果變更了訂單的合計金額,
且有指定 quoteExpiryPolicy 和 quoteExpiredUrl 兩個參數時,則:
- 如果重新計算的訂單合計沒有改變,且 quoteExpiryPolicy 參數不容許,這時會繼續正常運作。
- 如果重新計算的訂單合計比較小,且 quoteExpiryPolicy 參數不容許,這時會繼續正常運作。
- 如果重新計算的訂單合計比較大,且 quoteExpiryPolicy 參數容許,這時會繼續正常運作。
- 否則,請勿處理訂單,而要重新導向至 quoteExpiredURL 參數所指定的 URL
- 訂單項目的可用時間會設為其目前的預估可用時間。
- 如果訂單狀態是 'I',則會呼叫 CheckOrder 作業指令,驗證這張訂單尚未提交進行處理。
- 會呼叫 CheckOrderAcceptance
作業指令,驗證訂單項目合約是否為作用中。
- 更新 ORDOPTIONS
表格,以反映 notifyMerchant 和 notifyShopper 兩個參數的值。
- 如果有由 tcId 或 billToAddressId 參數所指定的帳單地址,將會儲存在訂單中。
- 如果有 field1、field2 和 field3 三個參數值,它們都會儲存在訂單中(請參考
ORDERS 表格)。
- 如果沒有啟用 ATP 庫存配置,且如果 DoPayment 作業指令介面的實作沒有同時實作
DoInventory 介面時,就會呼叫 UpdateInventory 作業指令,將訂單項目的庫存減量。
(DoInventory 介面不會宣告方法。實施這個介面的 DoPayment 作業指令,
會向領域宣告指令實施或其相關函數或指令會處理庫存更新。)
- 會呼叫適當的 DoPayment 作業指令,來執行額外的錯誤檢查和處理付款、
傳遞來自 ORDPAYINFO
表格的付款資訊名稱/值組合、和傳遞至 OrderProcess URL 指令的參數合併。
如果傳遞至 OrderProcess URL 指令的任何參數名稱和 ORDPAYINFO
表格中的名稱/值組合相同時,前一個值會取代後一個值。
合併的名稱/值組合清單會儲存在 ORDPAYINFO 表格中,以取代前一個付款資訊。
不過,OrderProcess URL 指令(在本頁上面說明)可特別識別的參數,
除了 tcId 參數外,都不會被視為付款資訊,因此不會儲存在 ORDPAYINFO 表格中。
- 如果 DoPayment 作業指令傳回一個訂單狀態值,訂單狀態即會設為該值。
不然的話,狀態會設為 'C',如果有啟用 ATP 庫存配置,並且訂單中包含任何補貨項目時,
狀態會設為 'B'。
- 如果訂單狀態是 'I',則會呼叫
ExtOrderProcess
作業指令。
( PaySynchronizePM 排程器指令稍後會呼叫
ExtOrderProcess 作業指令,當其將訂單狀態從 'I' 改成別的值時。)
- 呼叫 OrderMessaging
作業指令。
- 如果 notifyOrderSubmitted 參數指定 1(是),則呼叫
OrderNotify
作業指令,通知購物者有關他們提交的訂單。
- 如果 DoPayment 作業指令傳回位元組資料,位元組資料會被傳遞至
DirectView 檢視畫面,以便直接傳遞至客戶的瀏覽器(例如,啟動電子
付款 "錢包" 應用程式。
不然的話,RedirectView 檢視畫面會被傳遞 OrderOKView 重新導向
URL,以便向客戶顯示訂單確認。
異常狀況