SSH框架网上商城项目第26战之订单支付后发送短信提醒

上一节我们使用了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/post
    PostMethod 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程序发送给自己一条短信测试一下了。我的测试结果如下:   ![测试结果](http://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 {

  @Override
  public void sendMessage(String phoneNum, String id) {
    //1. 打开浏览器
    HttpClient client = new HttpClient();
    //2. 创建请求的方式:get/post
    PostMethod 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/eson_15/article/details/51475431  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。  

(0)

相关推荐

  • SSH框架网上商城项目第30战之项目总结(附源码下载地址)

    0. 写在前面 友情提示:下载地址在下面哦. 项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了,积少成多,写博客的过程是固化思路的一个过程,对自己很有用,同时也能帮助别人.顺便说个题外话,在学习的过程中肯定会遇到很多异常出现,我们要做的首先是定位这个异常,一般异常的后面都会跟一个或多个Caused by:xxx,这些都是引起异常的原因,一般我们找最下面的一个Caused by,那里往往才是问题的根源.如果自己解决不了,可以去谷歌.百度搜索(搜索的时候别一大堆异常往上一贴,注意搜关

  • SSH框架网上商城项目第8战之查询和删除商品类别功能实现

    上一节我们完成了使用DataGrid显示所有商品信息,这节我们开始添加几个功能:添加.更新.删除和查询.首先我们实现下前台的显示,然后再做后台获取数据. 1. 添加.更新.删除和查询功能的前台实现 DataGrid控件里有个toolbar属性,是添加工具栏的,我们可以在toolbar属性中添加这些按钮来实现相应的功能.先看一下官方文档对toolbar的定义: 我们使用数组的方式定义工具栏,在query.jsp页面中新添加如下代码: <%@ page language="java"

  • SSH框架网上商城项目第2战之基本增删查改、Service和Action的抽取

    上一节<SSH框架网上商城项目第1战之整合Struts2.Hibernate4.3和Spring4.2>我们搭建好了Struts2.Hibernate和Spring的开发环境,并成功将它们整合在一起.这节主要完成一些基本的增删改查以及Service.Dao和Action的抽取. 1. Service层的抽取         上一节中,我们在service层简单写了save和update方法,这里我们开始完善该部分的代码,然后对service层的代码进行抽取. 1.1 完善CategorySer

  • SSH框架网上商城项目第4战之EasyUI菜单的实现

    上篇文章我们使用EasyUI搭建了后台页面的框架,点击这里查看,这一节我们主要使用EasyUI技术简单实现后台菜单,先将简单功能做出来,后期再继续丰富. 1. 实现左侧菜单 首先看一下效果图: 我们可以点击"基本操作"和"其他操作"来切换菜单选项,在具体的选项内,点击不同的连接,会在右侧显示出来.我们先把左边的菜单做出来. 左侧菜单内容主要有两个:"类别管理"和"商品管理".我们知道,上一节中,在aindex.jsp中应将后台

  • SSH框架网上商城项目第20战之在线支付平台

    之前已经完成了首页的显示,用户添加购物车,确认订单等功能,下面就是支付功能的开发了.用户确认了订单后会直接跳转到支付页面进行在线支付,在线支付需要第三方的接口,这一节主要介绍一些关于第三方支付的内容,从下一节开始,我们真正开发在线支付模块. 1. 在线支付介绍 在线支付是指卖方与买方通过因特网上的电子商务网站进行交易时,银行为其提供网上资金结算服务的一种业务.它为企业和个人提供了一个安全.快捷.方便的电子商务应用环境和网上资金结算工具.在线支付不仅帮助企业实现了销售款项的快速归集,缩短收款周期,

  • php网上商城购物车设计代码分享

    首先,购物车的数据库设计: 1. id 2. goods_id 商品ID 3. session_id 购物车ID 4. goods_sn 商品编码 5. goods_name 商品名称 6. shop_price 商品商城售价 7. goods_price 商品真实售价(与shop_price的区别在于,当打折的时候,shop_price是打折之前商品的售价,而goods_price是打折之后的) 8. goods_number 数量 9. weight 商品重量 10. goods_attr

  • java网上商城项目第1篇之用户注册模块

    本文为大家讲解了商城项目用户注册模块,供大家参考,先看看效果图: 1.前台JS校验: 事件触发: onsubmit="checkForm()" 2.使用AJAX完成异步用户名是否存在校验 ①事件触发:onblur="checkUserName()" ②AJAX function checkUsername(){ var username = $("#username").val(); $("#span1").load(&quo

  • php 网上商城促销设计实例代码

    大体的思想,每一个促销要新建一个促销类,有专门的开关来控制是否生效. 用商品里面的促销识别码来判断具体调用哪一个促销实例. 首先,在添加商品的时候,分两步,第一步是添加状态,第二步是把购物车内的商品显示这个状态. 一,添加步骤几个重要的点: 1,添加商品之前,遍历所有的促销互斥条件. 例如,某一款商品不可以和另一个商品同时在一个购物车内:或者某个用户权限,不可以购买特定的一件商品等等. 2,添加商品之前,选择特定的促销实例,来进行添加之前的操作. 注:第二点与第一点的区别在于1是要遍历所有的促销

  • java网上商城开发之邮件发送功能(全)

    最近在学习网上商城时,接触到了一个邮件发送的功能.之前一直在使用邮箱进行发送邮件,但是其中的具体如何运转的却不知道是怎么回事.那么邮件发送究竟是怎么一回事呢? 邮件发送过程: 过程描述:首先是发送人将邮件通过客户端软件发送到特定的服务器上,然后通过电子邮件简单传输协议(SMTP)来进行传输,收件人通过POP3协议将邮件从服务器上接受回来.这样就实现了邮件之间的相互传送. 实现过程: 在有网络的情况下,我们可以直接使用搜狐.网易等邮箱进行发送.那么如何在没有网络的情况下,实现内部之间的发送呢? 首

  • SSH框架网上商城项目第23战之在线支付功能实现

    上一节我们做好了支付页面的显示,从上一节支付页面显示的jsp代码中可以看出,当用户点击确认支付时,会跳到${shop}/pay_goBank.action的action,也就是说,提交后我们得在payAction中的goBank方法中处理一些逻辑(即21节demo中的那个流程图的逻辑),即获得明文,将明文加密成签名(密文)然后再去访问易宝服务器,易宝连接银行,完成支付. 但是考虑到MVC设计模式,我们会将上面这些业务逻辑放到Service层中处理,所以下面我们来实现21节中那个demo的支付逻辑

随机推荐