SSH框架網(wǎng)上商城項(xiàng)目第26戰(zhàn)之訂單支付后發(fā)送短信提醒
上一節(jié)我們使用了Java mail完成了給買(mǎi)家發(fā)送郵件的功能,還遺留一個(gè)功能,就是給買(mǎi)家發(fā)送短信,告訴他訂單已經(jīng)生成之類(lèi)的。這一節(jié)主要介紹一下如何在用戶(hù)支付完成后自動(dòng)給用戶(hù)發(fā)送短信。
1. 申請(qǐng)短信發(fā)送功能
很明顯,我們自己不能發(fā)短信,也沒(méi)有做短信的功能,所以我們需要去借助第三方的運(yùn)營(yíng)商。但是像中國(guó)移動(dòng),聯(lián)通,電信這種不會(huì)直接給我們提供短信服務(wù),而是先把短信服務(wù)提供給一些運(yùn)營(yíng)商,然后這些運(yùn)營(yíng)商再提供給我們。
有一個(gè)運(yùn)營(yíng)商叫“中國(guó)網(wǎng)建sms短信通”(官網(wǎng)地址)。這個(gè)運(yùn)營(yíng)商可以給我們提供短信的服務(wù),進(jìn)入官網(wǎng)后可以看下收費(fèi)標(biāo)準(zhǔn),當(dāng)然咯,首次注冊(cè)免費(fèi)送5條短信,不過(guò)免費(fèi)的可能不是太穩(wěn)定,或者發(fā)送的時(shí)間比較久,這得看人品,不過(guò)付費(fèi)的基本上都挺好的。他的盈利模式就是用較低的價(jià)格從移動(dòng),聯(lián)通或者電信那邊拿到短信,然后賣(mài)給用戶(hù),當(dāng)然有優(yōu)惠套餐的,這種一般都是大公司或者有需要向用戶(hù)發(fā)送短信的業(yè)務(wù)時(shí)會(huì)購(gòu)買(mǎi)。
首先我們?nèi)プ?cè)一個(gè)賬號(hào)(其實(shí)是為了拿到那5條免費(fèi)的短息來(lái)測(cè)試我們的程序),為了把流程說(shuō)清楚,我盡量寫(xiě)詳細(xì)一點(diǎn),請(qǐng)看如下界面:
像這些姓名啊,email啊都可以隨便填的,手機(jī)填自己的就行了,因?yàn)闀?huì)收到登陸的用戶(hù)名和密碼。登陸后我們可以看到有5條免費(fèi)短信可以發(fā)送,如下:
友情提示:5條免費(fèi)短信第一天別用完,第二天又會(huì)再送5條,然后就不送了~
然后我們點(diǎn)擊上面圖片中的發(fā)送短信,會(huì)彈出一個(gè)發(fā)送短信的界面,我們不是為了去發(fā)送短信,而是去設(shè)置一些短信的后綴,即用戶(hù)收到短信后,最后面都有個(gè)后綴說(shuō)明來(lái)自哪里,如下:
保存之后,我們點(diǎn)擊左邊欄目中的“短信API接口”,就會(huì)跳出關(guān)于發(fā)送短信的API(這里也給出那個(gè)連接的地址),我們編程就需要參考他們提供給我們的API接口,就跟前面做支付功能一樣的,使用易寶給我們提供的官方接口。我們簡(jiǎn)單看一下:
上面只是部分內(nèi)容,詳情可以點(diǎn)擊上面給的鏈接。我們點(diǎn)擊圖片中密鑰的立即修改,主要是看一下密鑰是啥,然后將密鑰復(fù)制下來(lái),保存一下,后面寫(xiě)程序的時(shí)候要用到。
好了,現(xiàn)在準(zhǔn)備工作都做好了,API也有了,現(xiàn)在我們可以著手開(kāi)發(fā)短信功能了。
2. 測(cè)試一下第三方服務(wù)器正常與否
在開(kāi)發(fā)短信功能之前,我們先來(lái)測(cè)試一下這個(gè)中國(guó)網(wǎng)建的服務(wù)器是否正常,根據(jù)短信API頁(yè)面提供的數(shù)據(jù),我們可以使用UTF-8編碼發(fā)送接口的地址:
http://utf8.sms.webchinese.cn/?Uid=本站用戶(hù)名&Key=接口安全秘鑰&smsMob=手機(jī)號(hào)碼&smsText=驗(yàn)證碼:8888
來(lái)測(cè)試一下utf8.sms.webchines.cn是否正常。下面在工程中寫(xiě)一個(gè)test.jsp頁(yè)面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <%@ include file="/public/head.jspf" %> </head> <body> <!-- 參數(shù)自己要填好 --> <a > 測(cè)試服務(wù)器 </a> </body> </html>
(友情提示:在測(cè)試的時(shí)候不要多次測(cè)試,一次就夠了,主要看服務(wù)器是否正常,還得留幾次后面測(cè)試用。也可以將某個(gè)參數(shù)寫(xiě)錯(cuò),如果返回一個(gè)負(fù)數(shù),說(shuō)明服務(wù)器是正常的,可以根據(jù)API頁(yè)面提供的參數(shù)看相應(yīng)的負(fù)數(shù)代表哪里出錯(cuò)了。這只是用來(lái)測(cè)試的,實(shí)際中并不能這么去發(fā),因?yàn)殒溄又羞€有我的用戶(hù)名和密碼,肯定不行。)
3. 開(kāi)發(fā)短信發(fā)送功能
###**3.1 發(fā)送短信流程測(cè)試** 使用短信發(fā)送功能,需要以下三個(gè)jar包:(免費(fèi)下載地址:http://download.csdn.net/detail/eson_15/9528009) - `commons-codec-1.4.jar` - `commons-httpclient-3.1.jar` - `commons-logging-1.1.1.jar` 下面我們先寫(xiě)一個(gè)普通的java類(lèi)來(lái)完成短信發(fā)送功能,并測(cè)試正確性:
public class SendMessageDemo { public static void main(String[] args) throws Exception { //1. 打開(kāi)瀏覽器 HttpClient client = new HttpClient(); //2. 創(chuàng)建請(qǐng)求的方式:get/post PostMethod post = new PostMethod("http://utf8.sms.webchinese.cn/");//剛剛我們申請(qǐng)的那個(gè)服務(wù)器地址 //3. 設(shè)置請(qǐng)求的參數(shù)信息 post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");//設(shè)置轉(zhuǎn)碼 post.setParameter("Uid", "xxxx");//參數(shù)都和上面的一樣 post.setParameter("Key", "xxxx"); post.setParameter("smsMob", "xxxx"); post.setParameter("smsText", "測(cè)試一下!"); //4. 提交請(qǐng)求并返回狀態(tài)碼 int code = client.executeMethod(post); System.out.println("http返回的狀態(tài)碼:" + code);//如果打印出200說(shuō)明正常 //5. 獲取服務(wù)器端返回的數(shù)據(jù)信息 String result = post.getResponseBodyAsString(); System.out.println("短信發(fā)送結(jié)果為:" + result);//如果返回1說(shuō)明發(fā)送正常 } }
接下來(lái)就可以運(yùn)行一下這個(gè)java程序發(fā)送給自己一條短信測(cè)試一下了。我的測(cè)試結(jié)果如下:  ###**3.2 封裝到MessageUtilImpl中** 接下來(lái)就要在我們自己的項(xiàng)目中使用這個(gè)功能了,我們將上面的流程封裝到MessageUtilImpl工具類(lèi)中,并抽取接口,如下:
//抽取后的MessageUtil接口 public interface MessageUtil { public abstract void sendMessage(String phoneNum, String id); //MessageUtilImpl實(shí)現(xiàn)類(lèi) @Component("messageUtil") public class MessageUtilImpl implements MessageUtil { @Override public void sendMessage(String phoneNum, String id) { //1. 打開(kāi)瀏覽器 HttpClient client = new HttpClient(); //2. 創(chuàng)建請(qǐng)求的方式:get/post PostMethod post = new PostMethod("http://utf8.sms.webchinese.cn/"); //3. 設(shè)置請(qǐng)求的參數(shù)信息 post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); post.setParameter("Uid", "eson_15"); post.setParameter("Key", "0537729d0b59a7e7358b"); post.setParameter("smsMob", "15216771570"); post.setParameter("smsText", "測(cè)試一下!"); //4. 提交請(qǐng)求并返回狀態(tài)碼 try { int code = 0; code = client.executeMethod(post); System.out.println("http返回的狀態(tài)碼:" + code); //5. 獲取服務(wù)器端返回的數(shù)據(jù)信息 String result = post.getResponseBodyAsString(); System.out.println("短信發(fā)送結(jié)果為:" + result); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { post.releaseConnection(); } } }
4. 完善payAction
完成了工具類(lèi)的封裝,接下來(lái)我們把該工具類(lèi)放到BaseAction中,通過(guò)@Resource注解注入進(jìn)來(lái),供Action使用,下面我們完善前面的payAction中的backBank()方法,如下:
@Controller("payAction") @Scope("prototype") public class PayAction extends BaseAction<Object> implements ParameterAware { //省去無(wú)關(guān)代碼…… public void backBank() { BackData backData = (BackData)model; System.out.println(model); boolean isOK = payService.checkBackData(backData); if(isOK) { //1. 更新訂單狀態(tài),參數(shù)是自己根據(jù)數(shù)據(jù)庫(kù)中的情況傳進(jìn)去的,用來(lái)測(cè)試 forderService.updateStatusById(Integer.parseInt(backData.getR6_Order()), 2); //2. 根據(jù)user郵箱地址,發(fā)送郵件 String emailAddress = backData.getR8_MP().split(",")[0]; emailUtil.sendEmail(emailAddress, backData.getR6_Order()); //3. 發(fā)送手機(jī)短信 String phoneNum = backData.getR8_MP().split(",")[1]; messageUtil.sendMessage(phoneNum, backData.getR6_Order()); System.out.println("----success!!----"); } else { System.out.println("----false!!!----"); } } }
從易寶那邊返回的信息中r6_Order參數(shù)中保存的是訂單的編號(hào),r8_MP參數(shù)中是用戶(hù)的郵箱和電話(huà),第一個(gè)是郵箱第二個(gè)是手機(jī)號(hào)碼,用逗號(hào)隔開(kāi)了,所以我們首先要獲取用戶(hù)的手機(jī)號(hào)碼,然后再來(lái)發(fā)送短信。好了,支付完成后給用戶(hù)發(fā)送短信的功能就完成了。
原文鏈接:http://blog.csdn.net/eson_15/article/details/51475431
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家?! ?/p>
- SSH框架網(wǎng)上商城項(xiàng)目第8戰(zhàn)之查詢(xún)和刪除商品類(lèi)別功能實(shí)現(xiàn)
- SSH框架網(wǎng)上商城項(xiàng)目第4戰(zhàn)之EasyUI菜單的實(shí)現(xiàn)
- SSH框架網(wǎng)上商城項(xiàng)目第2戰(zhàn)之基本增刪查改、Service和Action的抽取
- java網(wǎng)上商城開(kāi)發(fā)之郵件發(fā)送功能(全)
- php 網(wǎng)上商城促銷(xiāo)設(shè)計(jì)實(shí)例代碼
- php網(wǎng)上商城購(gòu)物車(chē)設(shè)計(jì)代碼分享
- SSH框架網(wǎng)上商城項(xiàng)目第30戰(zhàn)之項(xiàng)目總結(jié)(附源碼下載地址)
- SSH框架網(wǎng)上商城項(xiàng)目第23戰(zhàn)之在線(xiàn)支付功能實(shí)現(xiàn)
- SSH框架網(wǎng)上商城項(xiàng)目第20戰(zhàn)之在線(xiàn)支付平臺(tái)
- java網(wǎng)上商城項(xiàng)目第1篇之用戶(hù)注冊(cè)模塊
相關(guān)文章
Java調(diào)用CXF WebService接口的兩種方式實(shí)例
今天小編就為大家分享一篇關(guān)于Java調(diào)用CXF WebService接口的兩種方式實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03Java網(wǎng)絡(luò)編程UDP實(shí)現(xiàn)消息發(fā)送及聊天
這篇文章主要為大家詳細(xì)介紹了Java網(wǎng)絡(luò)編程UDP實(shí)現(xiàn)消息發(fā)送及聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07springboot 防止重復(fù)請(qǐng)求防止重復(fù)點(diǎn)擊的操作
這篇文章主要介紹了springboot 防止重復(fù)請(qǐng)求防止重復(fù)點(diǎn)擊的操作,URL 攔截器可以使用 spring 攔截器,但使用 spring,每個(gè)需要過(guò)濾的新 URL 都需要添加配置,因此這里使用 AOP 注解 的形式來(lái)實(shí)現(xiàn),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01SpringBoot打War包上傳到阿里云的LINUX服務(wù)器的操作方法
這篇文章主要介紹了SpringBoot打War包上傳到阿里云的LINUX服務(wù)器,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02SpringMVC架構(gòu)的項(xiàng)目 js,css等靜態(tài)文件導(dǎo)入有問(wèn)題的解決方法
下面小編就為大家?guī)?lái)一篇SpringMVC架構(gòu)的項(xiàng)目 js,css等靜態(tài)文件導(dǎo)入有問(wèn)題的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10