Day24-26 項目練習(圖書商城)

圖書商城

環境搭建

  1. 導入原型

  • 用戶模塊
  • 分類模塊
  • 圖書模塊
  • 購物車模塊
  • 訂單模塊

 

2 功能分析

  • 前臺
    • 用戶模塊:
      • 註冊
      • 激活
      • 登陸
      • 退出
    • 分類模塊:
      • 查看全部分類
    • 圖書模塊:
      • 查詢全部圖書
      • 按分類查詢圖書
      • 查詢圖書詳細(按id查)
    • 購物車模塊:
      • 添加購物車條目;
      • 清空全部條目;
      • 刪除指定條目;
      • 個人購物車(按用戶查詢購物車)
    • 訂單模塊:
      • 生成訂單;
      • 個人訂單(按用戶查詢訂單)
      • 按id查詢訂單
      • 確認收貨
      • 付款功能(只是跳轉到銀行頁面)
      • 付款回調功能(由銀行來調用咱們這個方法,表示用戶已經付款成功)
  • 後臺:
    • 管理員:
      • 登陸
    • 分類管理:
      • 添加分類
      • 查看全部分類
      • 刪除分類
      • 按id查詢
      • 修改分類
    • 圖書管理(個人)
      • 查看全部圖書
      • 按id查詢
      • 刪除圖書
      • 修改圖書
      • 添加圖書(上傳圖片)
    • 訂單模塊
      • 查詢全部訂單
      • 按狀態查詢訂單
      • 發貨

3 框架的搭建

  1. 導包

  • 數據庫:
    • mysql驅動
    • c3p0(jar包和配置文件)
    • dbutils
    • itcast-tools
      • commons-beanutils
      • commons-logging
  • javamail
    • mail.jar
    • activation.jar
  • 上傳
    • commons-fileupload
    • commons-io
  • ajax
    • json-lib
  1. 建立package

  • 根:cn.itcast.bookstore
    • user
      • domain
      • dao
      • service
      • web.servlet
    • category
      • domain
      • dao
      • service
      • web.servlet
    • book
      • domain
      • dao
      • service
      • web.servlet
    • cart
      • domain
      • web.servlet
    • order
      • domain
      • dao
      • service
      • web.servlet

 

3.3 表

  • tb_user
  • category
  • book
  • orders
  • orderitem

 

用戶模塊

 

1 用戶模塊的相關類建立

  • domain:User
  • dao:UserDao
  • service:UserDao
  • web.servlet:UserServlet

2 用戶註冊

流程:/jsps/user/regist.jsp à UserServlet#regist() à msg.jsp html

頁面: java

  • regist.jsp
    • 表面頁面,請求UserServlet#regist()方法
    • 參數:整個表單數據
  • msg.jsp

Servlet: node

  • UserServlet#regist()
    • 一鍵封裝表單數據到User form對象
    • 補全:uid、激活碼
    • 輸入校驗:
      • 保存錯誤信息到request
      • 保存當前表單數據(form)到request(回顯);
      • 轉發回到regist.jsp
    • 調用service的regist()方法,傳遞form過去;
      • 若是拋出異常:保存錯誤信息(異常信息)、保存表單數據(回顯)、轉發到regist.jsp
      • 若是沒有拋出異常:
        • 發郵件(發件人、收件人、標題、內容),內容中包含超連接,超連接指向可完成激活的Servlet地址!連接中要有激活碼參數!
        • 保存成功信息到request中
        • 轉發到msg.jsp

Service: mysql

  • UserService#regist(User form)
    • 校驗用戶是否被註冊,若是註冊,拋出UserException;
    • 校驗郵箱是否被註冊,若是註冊,拋出UserException;
    • 把user插入到數據庫中

Dao: web

  • User findByUsername(String username):按用戶名查詢用戶
  • User findByEmail(String email):按emal查詢用戶
  • void add(User form):插入用戶到數據庫中

 

3 用戶激活

流程:用戶的郵件中 à UserServlet#active() à msg.jsp ajax

 

 

4 用戶登陸

流程:/jsps/user/login.jsp à UserServlet#login() à index.jsp 算法

5 用戶退出

流程:top.jsp à UserServlet#quit() à login.jsp sql

quit():把session銷燬! 數據庫

 

分類模塊

 

1 分類模塊的相關類建立

  • cn.itcast.bookstore.category
    • domain:Category
    • dao:CategoryDao
    • service:CategoryService
    • web.servlet:CategoryServlet

 

2 查詢全部分類

  流程:main.jsp(<iframe>) à CategoryService#findAll() à left.jsp json

 

圖書模塊

 

1 建立相關類

  • cn.itcast.bookstore.book
    • domain:Book
    • dao:BookDao
    • service :BookService
    • web.servle:BookServlet

 

 

2 查詢全部圖書

流程:left.jsp(所有分類) à BookServlet#findAll() à /jsps/book/list.jsp

 

3 按分類查詢圖書

流程:left.jsp à BookServlet#findByCategory() à list.jsp

 

 

 

4 查詢詳細信息(加載)

  流程:list.jsp(點擊某一本書) à BookServlet#load() à desc.jsp

 

購物車模塊

 

購物車存儲:

  • 保存在session中
  • 保存在cookie中;
  • 保存在數據庫中。

 

1 建立相關類

  • 購物車的結構:
    • CartItem:包含圖書和數量
    • Cart:包含一個Map<String,CartItem>
  • dao:沒有
  • service:沒有
  • web.servlet:提供!CartServlet

 

  修改登陸方法,在用戶登陸成功後,立刻在session中添加一輛車!!!

 

頁面:/jsps/cart/list.jsp

它只有一個任務,就是遍歷車!

車在session中,經過車能夠獲得全部的CartItem

${sessionScope.cart.cartItems}

 

2 添加購物車條目

 

3 清空條目

 

4 刪除購物車條目

 

5 個人購物車

top.jsp中存在一個連接:個人購物車

個人購物車直接訪問/jsps/cart/list.jsp,它會顯示session中車的全部條目

 

訂單模塊

 

1 建立相關類

  • domain:
    • Order
    • OrderItem
  • dao:OrderDao
  • service:OrderService
  • web.servlete:OrderServlet

 

2 生成訂單

 

3 個人訂單(按用戶查)

 

4 加載訂單(按id查)

 

5 確認收貨

 

易寶支付

在線支付的兩種形式:

  1. 電商與銀行直連!
  • 安全
  • 不收手續費
  • 不與小電商合做!

 

  1. 第三臺支付平臺
  • 支付寶
  • 易寶
  • 財富通

好處:

  • 不安全
  • 收手續費(1%)
  • 小電商能夠與其合做!

 

須要在第三方註冊帳戶

  • 須要認證!
  • 咱們有一個易寶的測試帳戶
    • 錢轉過去就要不回來了!

 

易寶支付

1 去銀行

  • 易寶給了咱們一個網址(支付網關),重定向到這個地址便可!
  • 還須要給這個地址後添加13+1個參數!

https://www.yeepay.com/app-merchant-proxy/node?p0_Cmd=Buy&p1_MerId=10001126856&p2_Order=123456&p3_Amt=1234.56&p4_Cur=CNY&p5_Pid=&p6_Pcat=&p7_Pdesc=&p8_Url=http://localhost:8080/bookstore/OrderServlet?method=back&p9_SAF=&pa_MP=&pd_FrpId= ICBC-NET-B2C&pr_NeedResponse=1&hmac=dd17580a3ca176ba62d6d348583ba88b

 

  • 易寶回調:
    • 點對點:易寶直接訪問電商,這裏沒有客戶端什麼事了。
      • 這種方式是必需要使用的,咱們這種方式是收不到的!由於咱們沒有固定IP
      • 易寶有一個重發機制,若是它訪問你,你不給它回信息,它會一直重發!
      • 電商須要返回一個以SUCCESS開頭的字符串便可!
    • 引導客戶端瀏覽器重定向到電商。是讓客戶端訪問電商!
      • 能夠不使用的!

 

  • hmac:13參數值+keyValue(密鑰) + 算法(md5)
    • 13參數值:本身設置的!
    • keyValue:易寶在咱們註冊後發給咱們的,這個東東只有咱們和易寶知道!
    • 底層爲md5的算法:PaymentUtil.buildHmac(14個),它返回hmac

 

 

6 支付(去銀行)

  • 重定向!
    • 13+1個參數!

7 支付(銀行回饋)

  • 校驗訪問者是否爲易寶
    • 修改訂單的狀態

 

 

後臺

後臺的內容,必需要設置權限!

用戶能夠訪問一個網站的哪些內容?

  • dao:不行
  • service:不行
  • servlet:能!
  • jsp:能!

  用戶能夠訪問的只有WEB層!

 

1 分類管理

  • 分類管理:
    • 添加分類
    • 查看全部分類
    • 刪除分類
    • 按id查詢
    • 修改分類

1.1 相關類建立

  • domain:Category
  • dao:CategoryDao
  • service:CategoryService
  • admin.web.servlet:AdminCategoryServlet(爲管理員提供單獨的Servlet,而後給這個Servlet添加過濾器!)

1.2 查看全部分類

  • left.jsp上的菜單修改一下指向:AdminCategoryServlet#findAll()
  • findAll():
    • 調用service獲得全部的分類List<Category>
    • 保存到request域,轉發到/adminjsps/admin/category/list.jsp
  • list.jsp:修改頁面,顯示全部分類!

 

1.3 添加分類

  • add.jsp(表單頁面) à
  • AdminCatetgoryServlet#add():
    • 封裝表單數據;
    • 補全:cid
    • 調用service方法完成添加工做
    • 調用findAll()方法
  • service#add(Category c):略
  • dao#add(Catetgory c):略

 

1.4 刪除分類

  • list.jsp(刪除連接) à
  • AdminCategoryServlet#delete()
    • 獲取參數:cid
    • 調用service方法完成刪除!
      • 若是出現異常,保存異常信息,轉發到msg.jsp顯示
    • 調用findAll()
  • service#delete(String cid):
    • 經過cid查看該分類下的圖書本數,若是大於0,拋出異常;
    • 若是等於0,刪除該分類;

1.5 修改分類

修改分爲兩步:一、加載分類, 二、修改分類

第一步:加載分類

  • list.jsp(修改連接) à
  • AdminCategoryServlet#editPre()
    • 獲取cid
    • 經過cid來調用service方法,獲得Category對象
    • 保存到request域中,轉發到mod.jsp
  • mod.jsp:把當前的Category對象顯示到表單中

第二步:修改分類

  • mod.jsp(提交表單) à
  • AdminCategoryServlet#edit()
    • 封裝表單數據
    • 調用service方法完成修改工做
    • 調用findAll()

 

 

2 圖書管理

  • 圖書管理(個人)
    • 查看全部圖書
    • 按id查詢
    • 刪除圖書
    • 修改圖書
    • 添加圖書(上傳圖片)

2.1 相關類建立

  • web.servlet.admin:
    • AdminBookServlet;
    • AdminAddBookServlet(添加圖書,包含上傳):上傳不能使用BaseServlet,由於BaseServlet中須要使用getParameter()方法,而上傳getParameter()方法就不能再使用了。

2.2 查詢全部圖書

  • left.jsp(菜單項(查看圖書連接)) à
  • AdminBookServlet#findAll()
    • 查詢全部圖書,保存到request
    • 轉發到/adminjsps/admin/book/list.jsp
  • list.jsp:循環遍歷全部圖書

2.3 加載圖書

  • list.jsp(點擊圖名或圖片) à
  • AdminBookServlet#load()
    • 獲取bid,經過bid調用BookService方法獲得Book對象
    • 保存到request中,轉發到/adminjsps/admin/book/desc.jsp
  • desc.jsp:把當前book對象顯示到表單中

 

2.4 添加圖書

添加圖書分兩步:

  1. 加載全部分類,到add.jsp中顯示!
  • left.jsp(菜單項:添加圖書) à
  • AdminBookServlet#addPre():
    • 查詢全部分類,保存到request域,轉發到add.jsp
  • 在add.jsp中循環遍歷全部分類,顯示在<select>中

 

  1. 添加圖書
  • 上傳三步:
    • 建立工廠
    • 建立解析器
    • 解析request獲得表單字段!
  • 把表單字段封裝到Book對象中
  • 保存上傳文件,把保存的路徑設置給Book的image屬性。
  • 調用service方法保存Book對象到數據庫中
  • 調用findAll()

 

2.5 刪除圖書

book表與orderitem有關聯關係!

刪除圖書不是真的數據庫表中刪除記錄,而是給book表添加一個del字段,它是booleanod類型,表示是否已刪除!

沒有被刪除的圖書,該列的值爲false,不然爲true

處理問題:

  • 修改BookDao:全部與查詢相關的方法,都須要添加where條件,即del=false
  • 修改Book類,添加del屬性!

 

刪除圖書:其實就是把表的del列修改成true!

 

  • desc.jsp(del按鈕) à
  • AdminBookServlet#del()
    • 獲取bid
    • 調用service方法完成刪除
    • 返回列表,即調用findAll()

 

2.6 編輯圖書
  • dsec.jsp(編輯按鈕) à
  • AdminBookServlet#edit()
    • 封裝表單數據(必須讓頁面保證把image傳遞過來)
      • 要求頁面必須添加一個隱藏字段,把原來的圖片路徑傳遞過來!
    • 調用service方法完成刪除
    • return findAll()

 

 

易寶支付api介紹:

1 在線支付概述

什麼是在線支付呢?沒錯,就是在網上花錢!你們必定有過這樣的經歷。可是你可能不太瞭解在線支付的"內情",下面咱們來了解一下!

若是你如今開始經營一個電子商務網站,用戶買了東西必定要支付,你的網站必定要能夠鏈接各大銀行了,而後在各大銀行支付完成後,再返回到你的網站上顯示"支付成功"!

這就是今天咱們要作的事情,鏈接銀行的網銀系統完成支付。說專業一點,咱們稱之爲"開發在線支付的網關"

 

2 兩種在線支付的方式

在線支付一共有兩種方式:

  • 電商直接與銀行對接;
  • 電商經過第三方支付平臺與銀行對接;

 

電商直接與銀行對接,這也要銀行贊成才行,但惋惜的是,銀行很"牛",不是誰想與它對接均可以的。若是你的電商每日的資金流量夠大,那麼銀行會和你對接,由於客戶支付給電商的錢都存到了銀行的賬戶中!可是若是資金流量小,銀行不會理你的!

 

當小網站資金量不足時,不能與銀行對接,那麼它們會選擇與第三方支付公司合做。你們也都明白這是些什麼公司,例如:支付寶、易寶、財富通、快錢等公司是國內比較有名的。它們這些公司能夠與銀行對接(由於資金夠多),而後小電商與它們對接!可是第三方是要求收費的!第三方通常會收取電商1%的費用,不過不會收客戶的錢。

 

 

經過上圖你們能夠了解到,在銀行的頁面上會顯示出商城名稱、RMB訂單號、訂單時間。。。,這些東西銀行是怎麼知道的,固然是電商傳遞給銀行的。當電商與銀行對接後,電商要給銀行的頁面傳遞銀行頁面須要的參數,因此銀行的頁面才能顯示這些數據!

可是,咱們的商城不能只能夠對接一家銀行吧!怎麼也要對接BOC、CCB、ABC、ICBC四家吧!不一樣的銀行須要的對接參數是不相同的,這說明咱們在開發時要爲不一樣的銀行寫不一樣的對接代碼。這也是直接與銀行對接的缺點!固然與銀行直接對接也有好處,就是安全,沒有手續費!

  • 爲不一樣的銀行開發不一樣的代碼(缺點);
  • 安全(優勢);
  • 沒有手續費(優勢);
  • 小電商銀行不讓對接(缺點)。

 

 

 

  上圖中已經說明,客戶在電商的網站上點擊確認支付後,會定向到第三方的網站,而後再由第三方與銀行對接。這說明電商要傳遞給第三方參數!再由第三方把參數傳遞給銀行。這種方式的好處是:只須要針對第三方開發便可,而不用再爲每家銀行提供參數。爲每家銀行提供參數的工做是第三方的任務了。可是,第三方不老可靠的,若是第三方倒閉了,人跑了,那你的錢就沒了。由於客戶支付的錢沒有到你的銀行賬戶中,而是支付到了第三方的銀行賬戶中,而你是在第三方有一個賬戶。並且第三方還要收手續費,通常是1%,這可不是小數字啊(真黑)。

 

3 經過第三方在線支付規則

電商想在第三方註冊商戶,須要向第三方提供ICP認證。ICP經營許可證是根據國家《互聯網管理辦法規定》,經營性網站必須辦理的網站經營許可證,沒有就屬於非法經營。

咱們不可能由於練習就去辦理ICP!因此咱們沒法在第三方註冊商戶。不過咱們已經有現成的在易寶註冊的商戶,因此這一步就能夠忽略了。

當你在易寶註冊成功後,易寶會給你以下幾樣東西:

  • 在易寶的開戶帳號(即商戶編碼):10001126856;
  • 易寶接入規範:一個chm文件;
  • 對稱加密算法類:PaymentUtil.java;
  • 密鑰:69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl。

 

在易寶接入規範中,咱們能夠查找到易寶的支付網關,其實就是一個URL,用來與易寶對接的一個網址:https://www.yeepay.com/app-merchant-proxy/node

在易寶接入規範中,還能夠查找到易寶要求的參數,在電商與易寶對接時須要給支付網關傳遞這些參數:

正式請求地址:https://www.yeepay.com/app-merchant-proxy/node

 參數名稱

 參數含義

是否必填

 參數長度

 參數說明

 簽名順序

 p0_Cmd

 業務類型

 Max(20)

 固定值"Buy" .

1

 p1_MerId

 商戶編號

 Max(11)

商戶在易寶支付系統的惟一身份標識.獲取方式見"如何得到商戶編號"

2

 p2_Order

 商戶訂單號

 Max(50)

若不爲"",提交的訂單號必須在自身帳戶交易中惟一;爲 ""
時,易寶支付會自動生成隨機的商戶訂單號.易寶支付系統中對於已付或者撤銷的訂單,商戶端不能重複提交。

3

 p3_Amt

 支付金額

 Max(20)

 單位:元,精確到分.此參數爲空則沒法直連(如直連會報錯:抱歉,交易金額過小。),必須到易寶網關讓消費者輸入金額

4

 p4_Cur

 交易幣種

 Max(10)

 固定值 "CNY".

5

 p5_Pid

 商品名稱

 Max(20)

用於支付時顯示在易寶支付網關左側的訂單產品信息.此參數如用到中文,請注意轉碼.

6

 p6_Pcat

 商品種類

 Max(20)

 商品種類.
 此參數如用到中文,請注意轉碼.

7

 p7_Pdesc

 商品描述

 Max(20)

 商品描述.
 此參數如用到中文,請注意轉碼.

8

 p8_Url

 商戶接收支付成功數據的地址

 Max(200)

支付成功後易寶支付會向該地址發送兩次成功通知,該地址能夠帶參數,如:
" www.yeepay.com/callback.action?test=test".
注意:如不填p8_Url的參數值支付成功後您將得不到支付成功的通知。

9

 p9_SAF

 送貨地址

 Max(1)

爲"1": 須要用戶將送貨地址留在易寶支付系統;爲"0": 不須要,默認爲 "0".

10

 pa_MP

 商戶擴展信息

 Max(200)

 返回時原樣返回,此參數如用到中文,請注意轉碼.

11

 pd_FrpId

 支付通道編碼

 Max(50)

默認爲 "" ,到易寶支付網關.
若不需顯示易寶支付的頁面,直接跳轉到各銀行、
神州行支付、駿網一卡通等支付頁面,
該字段可依照附錄:支付通道編碼列表 設置參數值.若是此值設置錯誤則會報"error.noAvaliableFrp"錯誤

12

 pr_NeedResponse

 應答機制

 Max(1)

固定值爲"1": 須要應答機制; 收到易寶支付服務器點對點支付成功通知,必須回寫以"success"(無關大小寫)開頭的字符串,即便您收到成功通知時發現該訂單已經處理過,也要正確回寫"success",不然易寶支付將認爲您的系統沒有收到通知,啓動重發機制,直到收到"success"爲止。

13

 hmac

 簽名數據

  

 Max(32)

產生hmac須要兩個參數,並調用相關API.
參數1: STR,列表中的參數值按照簽名順序拼接所產生的字符串,注意null要轉換爲 "",並確保無亂碼.
參數2: 商戶密鑰.見"如何得到商戶密鑰"
各語言範例已經提供封裝好了的方法用於生成此參數。
若是以上兩個參數有錯誤,則該參數必然錯誤,見"抱歉,交易簽名無效."

 

這些參數須要追加到URL後面。

可是要注意,這些參數的值須要加密。加密的密鑰和加密算法易寶都會提供!

 

其中p8_Url表示當支付成功後,返回到電商的哪一個頁面。這說明咱們須要寫一個顯示結果的頁面。第三方在支付成功後,會重定向到咱們指定的返回頁面,並且還會帶給咱們一些參數,咱們的頁面須要獲取這些參數,顯示在頁面中。下面是第三方返回的參數:

訂 單 查 詢 返 回 參 數

參數名稱

參數含義

參數長度

參數說明

簽名順序

r0_Cmd

業務類型

Max(20)

訂單查詢請求,固定值
"QueryOrdDetail"

1

r1_Code

查詢結果

 

爲"1": 查詢正常;
爲"50": 訂單不存在.

2

r2_TrxId

易寶支付交易流水號

Max(50)

 

3

r3_Amt

支付金額

Max(20)

單位:元,精確到分.

4

r4_Cur

交易幣種

Max(10)

固定值 "RMB".

5

r5_Pid

商品名稱

Max(20)

易寶支付返回商戶設置的商品名稱.
此參數如用到中文,請注意轉碼.

6

r6_Order

商戶訂單號

Max(50)

易寶支付返回商戶訂單號.

7

r8_MP

商戶擴展信息

Max(1000)

商戶能夠任意填寫1K的字符串,支付成功時將原樣返回.
此參數如用到中文,請注意轉碼.

8

rb_PayStatus

支付狀態

 

"INIT" 未支付;
"CANCELED" 已取消;
"SUCCESS" 已支付.

9

rc_RefundCount

已退款次數

   

10

rd_RefundAmt

已退款金額

   

11

 hmac

 簽名數據

Max(32)

產生hmac須要兩個參數,並調用相關API.
參數1: STR,列表中的參數值按照簽名順序拼接所產生的字符串,注意null要轉換爲 "".
參數2: 商戶密鑰.見"如何得到商戶密鑰"
各語言範例已經提供封裝好了的方法用於生成此參數。

 

 

4 開發第三方在線支付系統

步驟:

  • index.jsp頁面:一個表單,提交到BuyServlet,表單項有:訂單編號、付款金額、選擇銀行;
  • BuyServlet:獲取表單數據,準備鏈接第三方網關。由於在index.jsp頁面中只給出3個參數,而第三方須要的參數有N多,頁面沒有給出的參數由BuyServlet補充。並且參數還須要加密,這也須要在BuyServlet中完成;
  • BackServlet:當用戶支付成功後,第三方會重定向到咱們指定的返回頁面,咱們使用BackServlet做爲返回頁面,它用來接收第三方傳遞的參數,顯示在頁面中。

 

由於已經有了在易寶的註冊商號,因此咱們就不用本身去註冊商號了。因此這裏使用易寶作爲第三方支付平臺來測試。由於我本人沒有電商(必須經過ICP認證的電商),因此也不能在第三方註冊商號。

咱們如今使用的易寶商號是由傳智播客提供的,巴巴運動網在易寶註冊的商號。因此在測試時支付的錢都給了巴巴運動網在易寶註冊的商號了。

 

第一步:index.jsp

<form action="" method="post">

    訂單號:<input type="text" name="p2_Order"/><br/>

    金 額:<input type="text" name="p3_Amt"/><br/>

    選擇銀行:<br/>

    <input type="radio" name="pd_FrpId" value="ICBC-NET-B2C"/>工商銀行

    <img src="bank_img/icbc.bmp" align="middle"/>

    <input type="radio" name="pd_FrpId" value="BOC-NET-B2C"/>中國銀行

    <img src="bank_img/bc.bmp" align="middle"/><br/><br/>

    <input type="radio" name="pd_FrpId" value="ABC-NET-B2C"/>農業銀行

    <img src="bank_img/abc.bmp" align="middle"/>

    <input type="radio" name="pd_FrpId" value="CCB-NET-B2C"/>建設銀行

    <img src="bank_img/ccb.bmp" align="middle"/><br/><br/>

    <input type="radio" name="pd_FrpId" value="BOCO-NET-B2C"/>交通銀行

    <img src="bank_img/bcc.bmp" align="middle"/><br/>

    <input type="submit" value="確認支付"/>

</form>

 

每一個銀行對應的值:

可直連銀行

pd_FrpId參數值

對應支付通道名稱

LOGO圖片

1000000-NET 

易寶會員支付

  

ICBC-NET-B2C  

工商銀行

CMBCHINA-NET-B2C  

招商銀行

ABC-NET-B2C  

中國農業銀行

CCB-NET-B2C  

建設銀行

BCCB-NET-B2C  

北京銀行

BOCO-NET-B2C  

交通銀行

CIB-NET-B2C  

興業銀行

NJCB-NET-B2C  

南京銀行

CMBC-NET-B2C  

中國民生銀行

CEB-NET-B2C  

光大銀行

BOC-NET-B2C  

中國銀行

PINGANBANK-NET  

平安銀行

CBHB-NET-B2C  

渤海銀行

HKBEA-NET-B2C  

東亞銀行

NBCB-NET-B2C  

寧波銀行

ECITIC-NET-B2C  

中信銀行(須要證書才能鏈接到銀行)

SDB-NET-B2C  

深圳發展銀行

GDB-NET-B2C  

廣東發展銀行

SHB-NET-B2C  

上海銀行

SPDB-NET-B2C  

上海浦東發展銀行

POST-NET-B2C  

中國郵政

BJRCB-NET-B2C  

北京農村商業銀行

HXB-NET-B2C 

華夏銀行(此功能默認不開通,如需開通請與易寶支付銷售人員聯繫)

CZ-NET-B2C  

浙商銀行

 

第二步:BuyServlet.java

public class BuyServlet extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");

        response.setContentType("text/html;charset=utf-8");

 

        String p0_Cmd = "Buy";// 業務類型,固定值爲buy,即""

        String p1_MerId = "10001126856";// 在易寶註冊的商號

        String p2_Order = request.getParameter("p2_Order");// 訂單編號

        String p3_Amt = request.getParameter("p3_Amt");// 支付的金額

        String p4_Cur = "CNY";// 交易種幣,固定值爲CNY,表示人民幣

        String p5_Pid = "";// 商品名稱

        String p6_Pcat = "";// 商品各種

        String p7_Pdesc = "";// 商品描述

        String p8_Url = "http://localhost:8080/buy/BackServlet";// 電商的返回頁面,當支付成功後,易寶會重定向到這個頁面

        String p9_SAF = "";// 送貨地址

        String pa_MP = "";// 商品擴展信息

        String pd_FrpId = request.getParameter("pd_FrpId");// 支付通道,即選擇銀行

        String pr_NeedResponse = "1";// 應答機制,固定值爲1

 

        // 密鑰,由易寶提供,只有商戶和易寶知道這個密鑰。

        String keyValue = "69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl";

 

        // 經過上面的參數、密鑰、加密算法,生成hmac

        // 參數的順序是必須的,若是沒有值也不能給出null,而應該給出空字符串。

        String hmac = PaymentUtil.buildHmac(p0_Cmd, p1_MerId, p2_Order, p3_Amt,

                p4_Cur, p5_Pid, p6_Pcat, p7_Pdesc, p8_Url, p9_SAF, pa_MP,

                pd_FrpId, pr_NeedResponse, keyValue);

        

        // 把全部參數鏈接到網關地址後面

        String url = "https://www.yeepay.com/app-merchant-proxy/node";

        url += "?p0_Cmd=" + p0_Cmd +

                "&p1_MerId=" + p1_MerId +

                "&p2_Order=" + p2_Order +

                "&p3_Amt=" + p3_Amt +

                "&p4_Cur=" + p4_Cur +

                "&p5_Pid=" + p5_Pid +

                "&p6_Pcat=" + p6_Pcat +

                "&p7_Pdesc=" + p7_Pdesc +

                "&p8_Url=" + p8_Url +

                "&p9_SAF=" + p9_SAF +

                "&pa_MP=" + pa_MP +

                "&pd_FrpId=" + pd_FrpId +

                "&pr_NeedResponse=" + pr_NeedResponse +

                "&hmac=" + hmac;

        System.out.println(url);

        // 重定向到網關

        response.sendRedirect(url);

    }

}

 

第三步:BackServlet

public class BackServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");

        /*

         * 易寶會提供一系列的結果參數,咱們獲取其中須要的便可

         * 獲取支付結果:r1_Code1表示支付成功。

         * 獲取支付金額:r3_Amt

         * 獲取電商的訂單號:r6_Order

         * 獲取結果返回類型:r9_BType1表示重定向返回,2表示點對點返回,

         * 但點對點咱們收不到,由於咱們的ip都是局域網ip

         */

        String r1_Code = request.getParameter("r1_Code");

        String r3_Amt = request.getParameter("r3_Amt");

        String r6_Order = request.getParameter("r6_Order");

        String r9_BType = request.getParameter("r9_BType");

        

        if(r1_Code.equals("1")) {

            if(r9_BType.equals("1")) {

                response.getWriter().print("<h1>支付成功!</h1>");//其實支付不成功時根本易寶根本就不會返回到本Servlet

                response.getWriter().print("支付金額爲:" + r3_Amt + "<br/>");

                response.getWriter().print("訂單號爲:" + r6_Order + "<br/>");

            }

        }

    }

}

相關文章
相關標籤/搜索