当前位置: 移动技术网 > IT编程>开发语言>Java > 【SSH网上商城项目实战26】完成订单支付后的短信发送功能

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

2018年11月07日  | 移动技术网IT编程  | 我要评论

 

 转自: https://blog.csdn.net/eson_15/article/details/51475431

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

1. 申请短信发送功能

  很明显,我们自己不能发短信,也没有做短信的功能,所以我们需要去借助第三方的运营商。但是像中国移动,联通,电信这种不会直接给我们提供短信服务,而是先把短信服务提供给一些运营商,然后这些运营商再提供给我们。 
  有一个运营商叫“中国网建sms短信通”()。这个运营商可以给我们提供短信的服务,进入官网后可以看下收费标准,当然咯,首次注册免费送5条短信,不过免费的可能不是太稳定,或者发送的时间比较久,这得看人品,不过付费的基本上都挺好的。他的盈利模式就是用较低的价格从移动,联通或者电信那边拿到短信,然后卖给用户,当然有优惠套餐的,这种一般都是大公司或者有需要向用户发送短信的业务时会购买。 
  首先我们去注册一个账号(其实是为了拿到那5条免费的短息来测试我们的程序),为了把流程说清楚,我尽量写详细一点,请看如下界面: 
注册页面 
  像这些姓名啊,email啊都可以随便填的,手机填自己的就行了,因为会收到登陆的用户名和密码。登陆后我们可以看到有5条免费短信可以发送,如下: 
基本信息 
  友情提示:5条免费短信第一天别用完,第二天又会再送5条,然后就不送了~ 
  然后我们点击上面图片中的发送短信,会弹出一个发送短信的界面,我们不是为了去发送短信,而是去设置一些短信的后缀,即用户收到短信后,最后面都有个后缀说明来自哪里,如下: 
  填写后缀 
  保存之后,我们点击左边栏目中的“短信api接口”,就会跳出关于发送短信的api(这里也给出那个连接的),我们编程就需要参考他们提供给我们的api接口,就跟前面做支付功能一样的,使用易宝给我们提供的官方接口。我们简单看一下: 
  api 
  上面只是部分内容,详情可以点击上面给的链接。我们点击图片中密钥的立即修改,主要是看一下密钥是啥,然后将密钥复制下来,保存一下,后面写程序的时候要用到。 
  好了,现在准备工作都做好了,api也有了,现在我们可以着手开发短信功能了。

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

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

本站用户名&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程序发送给自己一条短信测试一下了。我的测试结果如下: ![测试结果](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 {

    @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参数中是用户的邮箱和电话,第一个是邮箱第二个是手机号码,用逗号隔开了,所以我们首先要获取用户的手机号码,然后再来发送短信。好了,支付完成后给用户发送短信的功能就完成了。 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网