zouber / Fanshop

1 stars 0 forks source link

實作新版購物車金流的部分 #487

Closed zouber closed 9 years ago

zouber commented 10 years ago

經過之前的外包案收回統整,目前對於金流部分掌握度已經很高 預計納入實作排程

zouber commented 10 years ago

Note: 把支援線上金流(不支援其實就跟以前一樣)與否做成可以用開關切換的

zouber commented 9 years ago

金流按鈕設定說明

但是滑鼠移上去之後,圖片要換成別張: 原始路徑: /media/img/payment_1.png /media/img/payment_2.png /media/img/payment_3.png 滑鼠 hover 之後: /media/img/payment_1_hover.png /media/img/payment_2_hover.png /media/img/payment_3_hover.png

zouber commented 9 years ago

金流部分的UI 在 --> /media/element_template/testUnpaid_order_block.html

zouber commented 9 years ago

設定匯款成功通知的地方在 付款類別 --> 其他項目管理 --> 付款設定,可設定一個 url 專門處理後續事項 2014-09-17 5 31 49

2014-09-17 5 43 09

zouber commented 9 years ago

要查詢交易單狀態:

2014-09-17 6 00 03

例如要查詢 2014-09 的交易單,就點 2014-09 的那個 "2" 連結,就會展開 9 月份的交易單明細

2014-09-17 6 00 55

交易單統計 --> 狀態筆數表 會有詳細的記載(成功授權 or 授權失敗 的單)

2014-09-17 7 00 29

zouber commented 9 years ago

疑點:

本來參數檢查碼1 參數檢查碼2 的查詢界面不見了 存取通行碼 查找的地方也不見了,不曉得發生什麼問題

zouber commented 9 years ago

9/17 先測試了" 虛擬帳號 ATM 轉帳付款" 匯款後(約當日下午六點半) 在交易單統計 --> 有效金額表裡會顯示 2014-09-17 6 42 16

2014-09-17 6 42 59

我方 server 會收到一個對方 server 發的 http request(GET) 2014-09-17 6 43 43

/payment_success_notify/? access_key=42337043 txid=zouber_testing amount=100 pay_type=2 status=1 tid=201409171169 language=tchinese verify=9df3e41f7cf179f0250600e5bae5e251 cname=%E6%9D%8E%E7%B5%B2%E7%B7%9A (李絲線) caddress=%E5%8F%B0%E5%8C%97%E5%B8%82%E4%BF%A1%E7%BE%A9%E8%B7%AF82%E5%B7%B7100%E8%99%9F (台北市信義路82巷100號) ctel=0928234348 cemail=zouber129%40gmail.com xname=%E6%9D%8E%E7%B5%B2%E7%B7%9A2 (李絲線2) xaddress=%E5%8F%B0%E5%8C%97%E5%B8%82%E4%BF%A1%E7%BE%A9%E8%B7%AF82%E5%B7%B7108%E8%99%9F (台北市信義路82巷108號) xtel=0928234348%20

跟既有 return_url 會帶上的參數差不多,初始交易表單(TransferMoneyTestPage.html) 的 html 參考範例:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>Fanshop money tarnsfer demo page</title>
</head>
<body>
<form name="pay" method="post" action="https://www.twv.com.tw/openpay/pay.php">
 <input type="hidden" name="version" value="2.1">
 <input type="hidden" name="mid" value="{{ data.mid}}"> <!--商家編號-->
 <input type="hidden" name="iid" value="0"> <!--分期付款期數 0: 不分期 -->
 <input type="hidden" name="txid" value="{{ data.order_id }}"> <!--訂單編號-->
 <input type="hidden" name="amount" value="{{ data.amount }}"> <!--付款金額-->
 <input type="hidden" name="verify" value="{{ data.verify}}">
 <input type="hidden" name="charset" value="UTF-8">
 <!--<input type="hidden" name="mode" value="2">-->
 <input type="hidden" name="return_url" value="{{ data.return_url}}">
 <input type="hidden" name="language" value="{{ data.language }}">
  <input type="hidden" name="cname" value="李絲線"> <!-- 消費者姓名 -->
 <input type="hidden" name="caddress" value="台北市信義路82巷100號"> <!-- 消費者地址 -->
 <input type="hidden" name="cemail" value="zouber129@gmail.com"> <!-- 消費者mail -->
 <input type="hidden" name="ctel" value="0928234348"> <!-- 收貨人地址 -->
 <input type="hidden" name="xname" value="李絲線2"> <!-- 收貨人姓名 -->
 <input type="hidden" name="xaddress" value="台北市信義路82巷108號">
 <input type="hidden" name="xtel" value="0928234348"> <!-- 收貨人電話 -->
 <input type="hidden" name="select_paymethod" value="1">
 <!-- 限定使用付款方式
    指定此參數, 則消費者於 OpenPay 的付款僅可使用此付款方式完成.
    允許值 [1,2,4,8,9,10,11,12,13,14], 無預設值.
    1:信用卡, 2:虛擬帳號, 4:WebATM, 8:便利超商, 9:7-11 ibon, 10:中國銀聯卡, 11:PayPal, 12:全家 FamiPort, 13:支付寶, 14:財富通.  如此便可以省去讓消費者再選一次的困擾(因為他在 fanshop 就已經會選一次)
 -->
<!--<input type="hidden" name="expire_date" value="YYYY-MM-DD">-->  
</form>
<script language="JavaScript"><!--
  // submit transfer money form when this page been open, automatically(sample code)
  document.pay.submit();
// --></script>
</body>
</html>
zouber commented 9 years ago

金額入帳後,應在 帳務管理 --> 交易單請款 處可以看到可請款的交易單

zouber commented 9 years ago

匯款成功後,購買人會收到下列的交易成功 mail

2014-09-17 7 05 19

2014-09-17 5 16 06

zouber commented 9 years ago

9/18 測試信用卡付款

2014-09-18 3 04 13

redirect 頁面接收參數 2014-09-18 3 08 48

經過實驗,台灣里用 POST 回傳的資料皆為 unicode 格式,所以不必再轉字串儲存,否則會產生以下錯誤 2014-10-22 9 12 52

zouber commented 9 years ago

Note: 今天打電話去確認,對方說讀家的付款狀態是OK的,參數檢查碼的部分現在基於政策,已經隱藏起來,在界面裡面看不到

zouber commented 9 years ago

(信用卡付款) 經思考後可行的流程:

  1. 點擊後先送出 addPaidOrder request 取得 PaidOrder id
  2. 取得 PaidOrder id 後(包含缺貨商品資訊),再來打開台灣里的付款頁面
  3. 走一般付款流程(之前已經測過)
  4. 付款完成後,台灣里轉址回到 /payment_result/ ,這頁的 controller 會去調出 paid order 將它的狀態改為 已確認匯款,直接進到出貨管理。前台的部分則將此訂單註記為已付款,不允許 user 再改物流方案 或是 訂購品項。

注意:paid order 建立並不代表交易完成,此時 paid order 的狀態為 'credit_card-unpaid',要等台灣里真的收到錢重新導向回來,才會改為 'paid',此時店家才會看得到這筆單

注意:由於現在是採取 "先送出 PaidOrder" 的方式,但使用者未必會真的付款,但在還沒付款之前,那筆PaidOrder 的 status 只會是 credit_card-unpaid(Order 的status 也會是 unpaid),所以並不會出現在店家的介面裡,如果使用者事後沒有付錢,那該筆訂單也就放在那裡,不會造成影響,只是會佔儲存空間。

尚未完成事項:

  1. 付款完成的 vendor block 不能再改動任何東西 --> done! (10/27)
  2. 付款完成後(paid order 成立),是否要自動進到出貨管理系統 --> OK(10/23 會議中取得大家共識) --> 製作完成(10/28),尚待測試
  3. 然後發送 Email 給買家(在 vendor admin 頁編輯),信件內容讓他直接可以點到訂單查詢頁(直接做出貨動作) http://www.fanshop.tw/search_paid_order/?q=973&status=insufficient&vid=217050608383796&search_type=paidorder_id
  4. 取消台灣里發信通知的效果 --> 不是透過參數設定,設定介面在這裡:https://www.twv.com.tw/~ec/Snow/Merchant/frame.php?_s2=1414396646 ,各種付款渠道是否開通的設定也在這裡設,離線付款通知的msg 回傳網址也在這裡 10/27 關閉付款成功通知,並用手機測試無誤 --> 過幾分鐘後又收到,要打電話去詢問
zouber commented 9 years ago

測試用金額紀錄:

先跟政漢拿了一百元

我測了信用卡一次,虛擬帳號一次,共計200元

10/22 轉出100元兩次,共計 200 元 10/23 轉出100元三次,共計300元

zouber commented 9 years ago

10/23 iphone 5c 上的 Chrome 測試,手機的視窗無法自己關閉,但手動關閉後的流程運行正常,也可以成功送出訂單

此次交易成功,金額為 100 元

zouber commented 9 years ago

10/27 iphone 5c 上的 Chrome 測試,這次使用 台北富邦的 Master Card,有3D 動態驗證碼(透過簡訊發送),通過驗證,完成 100 元的交易,的確沒有再收到台灣里的通知信(已經關閉掉)

10/29 整條流程測試,這次使用 花旗信用卡(Visa),完成100元的交易,有收到台灣里通知

zouber commented 9 years ago

現行線上信用卡付款機制流程追蹤:

  1. 使用者點下信用卡付款按鈕,即刻就送出 addPaidOrder ajax reqest
  2. 如果回傳新增 PaidOrder 無誤,那就開啟彈出視窗,進入台灣里付款流程
  3. 使用者順利完成交易後,會導回fanshop 交易訊息接收頁,此時會把 paid order 和 order 的狀態都改為已經付款,此時會順便將 paid order 送進出貨管理系統(怕短期內改到同筆資訊,所以延遲 1 分鐘執行計算出貨管理狀態的動作) --> 送Paid Order 進出貨管理系統時,會順便寄出通知信,告知店家訂單已經成立
  4. 視窗自動(在手機上還沒有做成)關閉
  5. 提示使用者付款已成功,導引她留言,留言成功後此訂單自動會消失於介面上

Note: 為了怕"修改出貨狀態"和"修改留言"的兩次分開的 request 衝突導致 race condition,會設置 db 的號誌系統(訂單成立時會有一筆紀錄,若此紀錄還沒被消除掉,則代表訂單出貨狀態還沒被計算出來,此時留言先"寄放"在db 裏的某處,等到出貨狀態計算那段時,再去撈"寄放"在db 的留言,把它寫入訂單資訊裡)。

zouber commented 9 years ago

經過詢問台灣里客服後,買家收到信件的設定是不能改的 必然會收到信,唯一能改的只有"賣家" 是否收得到信

zouber commented 9 years ago

10/31 調查之前信用卡付款出貨管理數據會錯誤的問題,發現錯誤的原因在於之前 /api/vendorConfirmPayment/ 程式裡面有錯誤,而該 api 被當成 task 送進 task queue 但因為程式碼有錯誤,這個 task 就自動一直被反覆重新執行(task queue 有反覆嘗試次數) 被執行了 13 次之多,所以該品項的需求量大亂

zouber commented 9 years ago

第一次送入出貨管理系統的記錄檔:可以發現邏輯計算是正常的

2014-10-31 8 51 26

2014-10-31 8 51 52

zouber commented 9 years ago

到最後因為反覆執行了 13 次,可以觀察到各種數據被扭曲的情形:

2014-10-31 8 59 53

2014-10-31 9 00 28

zouber commented 9 years ago

Order #28648 的 OrderInventoryRecord 如下(經過反覆執行導致錯誤的狀態):

2014-10-31 9 19 19

Order #28648 本身狀態如下: 2014-10-31 9 26 00

而 ProductInventoryQuantity 的錯誤狀態則如下: 2014-10-31 9 20 58

手動修復前備份

zouber commented 9 years ago

11/1 測試產生 PaidOrder #6623 整個流程正確無誤 又轉了100元

zouber commented 9 years ago

針對付款成功寄發通知信給賣家的技術部份,開了 #533

zouber commented 9 years ago

最新成立的信用卡測試訂單,其狀態如下(因為表格太長, 所以由左到右切四段): Paid order id = 6623

2014-11-01 4 05 52

2014-11-01 4 06 10

2014-11-01 4 06 22

2014-11-01 4 06 34

zouber commented 9 years ago

11/3 凌晨加上寄通知信(給買家)流程後,再次測試,轉100元。

因為中間發生程式錯誤,再次測試,再轉100元

再轉100元

再次轉100元

再次轉100 元

11/3 開會時 live demo 給大家看,又匯100 元

zouber commented 9 years ago

現只剩要修改台灣里的付款廠商名稱/帳號

zouber commented 9 years ago

詢問台灣里,修改的方式

修改廠商名稱: 寄信到 opp@twe.com.tw

修改結帳銀行帳戶: 傳真帳戶存摺影本(要註明廠商編號)到 06-7234-736

zouber commented 9 years ago

11/4 上線前測試,測到 error,匯了100元

後來修復 error,在測一次,又 100 元

zouber commented 9 years ago

本次製作線上信用卡服務,共計轉帳 2000 元(台灣里報表介面為準),之後會驗證請款流程 目前看起來是10 天後可以請款

2014-11-04 4 04 38

zouber commented 9 years ago

全部完成

zouber commented 9 years ago

上線後產生了 #537 #539 #540 等error,都排除後產生第一筆訂單,通知信如下:

店家端: 2014-11-07 3 25 26

買家端: 2014-11-07 3 35 22

zouber commented 9 years ago

已完成,close