上一节我们使用了Java mail完成了给买家发送邮件的功能,还遗留一个功能,就是给买家发送短信,告诉他订单已经生成之类的。这一节主要介绍一下如何在用户支付完成后自动给用户发送短信。

1. 申请短信发送功能

  很明显,我们自己不能发短信,也没有做短信的功能,所以我们需要去借助第三方的运营商。但是像中国移动,联通,电信这种不会直接给我们提供短信服务,而是先把短信服务提供给一些运营商,然后这些运营商再提供给我们。
  有一个运营商叫“中国网建sms短信通”(官网地址)。这个运营商可以给我们提供短信的服务,进入官网后可以看下收费标准,当然咯,首次注册免费送5条短信,不过免费的可能不是太稳定,或者发送的时间比较久,这得看人品,不过付费的基本上都挺好的。他的盈利模式就是用较低的价格从移动,联通或者电信那边拿到短信,然后卖给用户,当然有优惠套餐的,这种一般都是大公司或者有需要向用户发送短信的业务时会购买。
  首先我们去注册一个账号(其实是为了拿到那5条免费的短息来测试我们的程序),为了把流程说清楚,我尽量写详细一点,请看如下界面:

  像这些姓名啊,email啊都可以随便填的,手机填自己的就行了,因为会收到登陆的用户名和密码。登陆后我们可以看到有5条免费短信可以发送,如下:

  友情提示:5条免费短信第一天别用完,第二天又会再送5条,然后就不送了~
  然后我们点击上面图片中的发送短信,会弹出一个发送短信的界面,我们不是为了去发送短信,而是去设置一些短信的后缀,即用户收到短信后,最后面都有个后缀说明来自哪里,如下:
  
  保存之后,我们点击左边栏目中的“短信API接口”,就会跳出关于发送短信的API(这里也给出那个连接的地址),我们编程就需要参考他们提供给我们的API接口,就跟前面做支付功能一样的,使用易宝给我们提供的官方接口。我们简单看一下:
  
  上面只是部分内容,详情可以点击上面给的链接。我们点击图片中密钥的立即修改,主要是看一下密钥是啥,然后将密钥复制下来,保存一下,后面写程序的时候要用到。
  好了,现在准备工作都做好了,API也有了,现在我们可以着手开发短信功能了。

2. 测试一下第三方服务器正常与否

  在开发短信功能之前,我们先来测试一下这个中国网建的服务器是否正常,根据短信API页面提供的数据,我们可以使用UTF-8编码发送接口的地址:

http://utf8.sms.webchinese.cn/?Uid=本站用户名&Key=接口安全秘钥&smsMob=手机号码&smsText=验证码:8888

来测试一下utf8.sms.webchines.cn是否正常。下面在工程中写一个test.jsp页面:

<%@ 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><!-- 参数自己要填好 --><a href="http://utf8.sms.webchinese.cn/?Uid=本站用户名&Key=接口安全秘钥&smsMob=手机号码&smsText=验证码:8888">测试服务器</a></body>
</html>

  (友情提示:在测试的时候不要多次测试,一次就够了,主要看服务器是否正常,还得留几次后面测试用。也可以将某个参数写错,如果返回一个负数,说明服务器是正常的,可以根据API页面提供的参数看相应的负数代表哪里出错了。这只是用来测试的,实际中并不能这么去发,因为链接中还有我的用户名和密码,肯定不行。)

3. 开发短信发送功能

  ###** 3.1 发送短信流程测试**   使用短信发送功能,需要以下三个jar包:(免费下载地址:http://download.csdn.net/detail/eson_15/9528009) - `commons-codec-1.4.jar` - `commons-httpclient-3.1.jar` - `commons-logging-1.1.1.jar` 下面我们先写一个普通的java类来完成短信发送功能,并测试正确性:

public class SendMessageDemo {  public static void main(String[] args) throws Exception {//1. 打开浏览器HttpClient client = new HttpClient();//2. 创建请求的方式:get/postPostMethod post = new PostMethod("http://utf8.sms.webchinese.cn/");//刚刚我们申请的那个服务器地址//3. 设置请求的参数信息post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");//设置转码post.setParameter("Uid", "xxxx");//参数都和上面的一样post.setParameter("Key", "xxxx");post.setParameter("smsMob", "xxxx");post.setParameter("smsText", "测试一下!");//4. 提交请求并返回状态码int code = client.executeMethod(post);System.out.println("http返回的状态码:" + code);//如果打印出200说明正常//5. 获取服务器端返回的数据信息String result = post.getResponseBodyAsString();System.out.println("短信发送结果为:" + result);//如果返回1说明发送正常           }
}

   接下来就可以运行一下这个java程序发送给自己一条短信测试一下了。我的测试结果如下: ![测试结果](https://img-blog.csdn.net/20160523122802066) ###** 3.2 封装到MessageUtilImpl中**   接下来就要在我们自己的项目中使用这个功能了,我们将上面的流程封装到MessageUtilImpl工具类中,并抽取接口,如下:

//抽取后的MessageUtil接口
public interface MessageUtil {public abstract void sendMessage(String phoneNum, String id);//MessageUtilImpl实现类
@Component("messageUtil")
public class MessageUtilImpl implements MessageUtil {@Overridepublic void sendMessage(String phoneNum, String id) {//1. 打开浏览器HttpClient client = new HttpClient();//2. 创建请求的方式:get/postPostMethod post = new PostMethod("http://utf8.sms.webchinese.cn/");//3. 设置请求的参数信息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", "测试一下!");//4. 提交请求并返回状态码try {int code = 0;code = client.executeMethod(post);System.out.println("http返回的状态码:" + code);//5. 获取服务器端返回的数据信息String result = post.getResponseBodyAsString();System.out.println("短信发送结果为:" + result);} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);} finally {post.releaseConnection();}}
}

4. 完善payAction

  完成了工具类的封装,接下来我们把该工具类放到BaseAction中,通过@Resource注解注入进来,供Action使用,下面我们完善前面的payAction中的backBank()方法,如下:

@Controller("payAction")
@Scope("prototype")
public class PayAction extends BaseAction<Object> implements ParameterAware {//省去无关代码……public void backBank() {BackData backData = (BackData)model;System.out.println(model);boolean isOK = payService.checkBackData(backData);if(isOK) {//1. 更新订单状态,参数是自己根据数据库中的情况传进去的,用来测试forderService.updateStatusById(Integer.parseInt(backData.getR6_Order()), 2);//2. 根据user邮箱地址,发送邮件String emailAddress = backData.getR8_MP().split(",")[0];emailUtil.sendEmail(emailAddress, backData.getR6_Order());//3. 发送手机短信String phoneNum = backData.getR8_MP().split(",")[1];messageUtil.sendMessage(phoneNum, backData.getR6_Order());System.out.println("----success!!----");} else {System.out.println("----false!!!----");}}
}

  从易宝那边返回的信息中r6_Order参数中保存的是订单的编号,r8_MP参数中是用户的邮箱和电话,第一个是邮箱第二个是手机号码,用逗号隔开了,所以我们首先要获取用户的手机号码,然后再来发送短信。好了,支付完成后给用户发送短信的功能就完成了。
  
相关阅读:http://blog.csdn.net/column/details/str2hiberspring.html
整个项目的源码下载地址:http://blog.csdn.net/eson_15/article/details/51479994

文末福利:“程序员私房菜”,一个有温度的公众号~


—–乐于分享,共同进步!
—–更多文章请看:http://blog.csdn.net/eson_15

【SSH网上商城项目实战26】完成订单支付后的短信发送功能相关推荐

  1. 【SSH网上商城项目实战19】订单信息的级联入库以及页面的缓存问题

    购物车这一块还剩最后两个问题,就是订单信息的级联入库和页面缓存,这里的信息是指购物车和购物项,即我们将购物车的信息存入数据库的同时,也存入每个购物项的信息,而且外键都关联好,这涉及到了Hibernat ...

  2. 【SSH网上商城项目实战20】在线支付平台的介绍

    之前已经完成了首页的显示,用户添加购物车,确认订单等功能,下面就是支付功能的开发了.用户确认了订单后会直接跳转到支付页面进行在线支付,在线支付需要第三方的接口,这一节主要介绍一些关于第三方支付的内容, ...

  3. 【SSH网上商城项目实战】之环境搭建填坑

    此篇主要是记录我在从零开始走一遍倪升武大神的[SSH网上商城项目实战]过程中遇到的一些坑并记录解决方法.关于这个项目,大家可以去倪升武的博客学习了解,SSH网上商城项目实战请戳倪升武的项目实战专题. ...

  4. 【SSH网上商城项目实战21】从Demo中看易宝支付的流程

    这一节我们先写一个简单点的Demo来测试易宝支付的流程,熟悉这个流程后,再做实际的开发,因为是一个Demo,所以我没有考虑一些设计模式的东西,就是直接实现支付功能.实现支付功能需要易宝给我们提供的AP ...

  5. 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示

    转自:https://blog.csdn.net/eson_15/article/details/51405911 网上商城首页都有热门商品,那么这些商品的点击率是很高的,当用户点击某个热门商品后需要 ...

  6. 【SSH网上商城项目实战01】整合Struts2、Hibernate4.3和Spring4.2

    转自:https://blog.csdn.net/eson_15/article/details/51277324 今天开始做一个网上商城的项目,首先从搭建环境开始,一步步整合S2SH.这篇博文主要总 ...

  7. 【SSH网上商城项目实战03】使用EasyUI搭建后台页面框架

    转自:https://blog.csdn.net/eson_15/article/details/51312490 前面两节,我们整合了SSH并且抽取了service和action部分的接口,可以说基 ...

  8. 【SSH网上商城项目实战23】完成在线支付功能

    转自:https://blog.csdn.net/eson_15/article/details/51464415 上一节我们做好了支付页面的显示,从上一节支付页面显示的jsp代码中可以看出,当用户点 ...

  9. 【SSH网上商城项目实战22】获取银行图标以及支付页面的显示

    目录(?)[+] 存储银行图标 1 获取图标名称 2 将图标名称存入application域 支付页面显示 测试一下效果 从上一节的小demo中我们搞清楚了如何跟易宝对接以及易宝的支付流程.这一节我们 ...

  10. 【SSH网上商城项目实战18】过滤器实现购物登录功能的判断

    转自:https://blog.csdn.net/eson_15/article/details/51425010 上一节我们做完了购物车的基本操作,但是有个问题是:当用户点击结算时,我们应该做一个登 ...

最新文章

  1. java实现局域网内单对单和多对多通信的设计思路
  2. HDU2034(set的应用)
  3. 在线拼音输入法,挺好玩的。
  4. J2EE的13种核心技术
  5. java面试的题积累【持续更新中......】
  6. 超详细图解!【MySQL进阶篇】MySQL事务和锁
  7. python迭代器使用_Python迭代器的用法
  8. Java final修饰符详解
  9. MySQL故障检测_mysql主从故障检测处理脚本
  10. 抖音店播 就是我们说的商家自播品牌自播
  11. SpringCloud使用Prometheus监控(基于Eureka)
  12. 规则引擎--规则引擎构成重点
  13. Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
  14. 十二个开源UML工具
  15. java设置一个内部类child_java的内部类及匿名内部类
  16. Typora桌面快捷方式创建
  17. maven 详情查考 maven实战 许晓斌
  18. PySpark机器学习 ML
  19. PaddleOCR体检报告识别
  20. 怎样查看自己的电脑是多少位的?

热门文章

  1. 基于Java的办公用品管理系统的设计与实现
  2. 中国城市生活节奏排行榜
  3. gradle教程java_gradle入门到精通视频教程 下载
  4. 3d打印机c语言程序下载,芯烨打印机设置软件工具
  5. codesys工控机_CODESYS在系统集成项目中的运用案例
  6. 浅谈融云即时通讯服务「日志优化」
  7. Vue 单文件模板中覆盖引入库 CSS 样式
  8. 三极管放大电路基本原理
  9. CCF CSP 201503-1 图像旋转
  10. sonarqube 数据清理