关于微信服务号开发的微信支付一般有两种情况。一种为微信充值,然后服务号中余额增加;一种为购买商品,微信支付。在微信支付中(JSSDKUtil.setPayParam(request, notifyUrl, money, orderId, openId);)需要传2个必要参数到方法中,微信支付单号和money  ,关于微信支付单号orderId  ,必须全世界唯一 ,每次和全世界都不一样,可以用(String orderId = UUID.randomUUID().toString().replaceAll("-", "");)UUID工具类生成,以保证每次都在全世界唯一,然后就是在订单表中必须存在一字段保存ordered,因为在支付回调函数成功后的方法里,需要用回调回来的orderid来获取订单对象,从而改变订单状态,进行后续操作。微信充值也是一个道理,需要在会员表中存在一个存放ordered的字段,好利用它进行回调函数成功方法中获取原本会员对象,然后对对象余额加钱。思路就这样,附上重点代码:
//充值
@Controller
@RequestMapping("/chongzhi.do")
public class ChongzhiAction {
 
 public static void main(String[] args) {
  
  
 }
 
    @Autowired
 private TixianService tixianService;
    @Autowired
 private KtdpService  ktdpService;
@Autowired
 private HttpServletRequest request;
 
 /**
  * 支付回调
  * @param request
  * @return
  * @throws IOException
  */
 @RequestMapping
 public String execute(HttpServletRequest request,HttpServletResponse response) throws IOException
 {
  //请修改数据库状态
  InputStream is = request.getInputStream();
  byte[] b = new byte[1024];
  int size = is.read(b);
  String str = new String(b, 0, size);
  System.out.println(str);
  // 获取请求数据
  PayNotify payNotify = XMLConverUtil.convertToObject(PayNotify.class,
    str);
// 签名判断略...
  String sign = payNotify.getSign();
boolean f = SignatureUtil.validateAppSignature(payNotify,
    WeixinConfig.PAY_KEY);
  
  System.out.println("充值进来了1------"+payNotify.getResult_code());
  System.out.println("充值进来了2------"+payNotify.getReturn_code());
 
  // 支付成功
  if ("SUCCESS".equals(payNotify.getResult_code())
    && "SUCCESS".equals(payNotify.getReturn_code())) {
   System.out.println("充值进来了------");
   String orderid = payNotify.getOut_trade_no();
   String money= payNotify.getTotal_fee();
   //String qian = String.format("%.2f", money);
   String opid = payNotify.getOpenid();
   System.out.println(opid+"opid");
            //修改状态
   
    //支付->余额加钱
   Member member = ktdpService.findByOrderId(orderid);
   member.setMenMoney(member.getMenMoney()+Float.parseFloat(money)/100);
   ktdpService.update(member);
    //增加一条记录
   String wpayId=tixianService.getwpayId();
      tixianService.addwpay(opid, money, wpayId);
response.getOutputStream().write("success".getBytes());
} else {
   response.getOutputStream().write("error".getBytes());
  }
return null;
 }
 
 @RequestMapping(params="method=chongzhi")
 public String toPay(HttpServletRequest request)
 {
  // 1.得openId
  String openId = (String) request.getSession().getAttribute("openId");
  
  String orderId = UUID.randomUUID().toString().replaceAll("-", "");
  Member member = ktdpService.findByOpenId(openId);
  member.setOrderId(orderId);
  ktdpService.update(member);
  
  //  参数 
  String chongzhimoney=request.getParameter("chongzhimoney");
  //System.out.println(chongzhimoney);
  // 2.去支付
  String notifyUrl = URLManager.getServerURL(request)+"/chongzhi.do";
  String json = JSSDKUtil.setPayParam(request, notifyUrl, chongzhimoney, orderId,
    openId);
        request.setAttribute("json", json);
  // 4.调用微信支付
  return "/pay_example.jsp";
  
 }
 
}
//订单支付
@Controller
@RequestMapping("/cardd.do")
public class CartoorderAction{
 
 public static void main(String[] args) {
  
  
 }
 
    @Autowired
 private KtdpService  ktdpService;
   
@Autowired
 private TixianService tixianService;
 @Autowired
 private DingDanService dingDanService;
@Autowired
 private HttpServletRequest request;
 
 /**
  * 支付回调
  * @param request
  * @return
  * @throws IOException
  */
 @RequestMapping
 public String execute(HttpServletRequest request,HttpServletResponse response) throws IOException
 {
  //请修改数据库状态
  InputStream is = request.getInputStream();
  byte[] b = new byte[1024];
  int size = is.read(b);
  String str = new String(b, 0, size);
  System.out.println(str);
  // 获取请求数据
  PayNotify payNotify = XMLConverUtil.convertToObject(PayNotify.class,
    str);
// 签名判断略...
  String sign = payNotify.getSign();
boolean f = SignatureUtil.validateAppSignature(payNotify,
    WeixinConfig.PAY_KEY);
  
 
  // 支付成功
  if ("SUCCESS".equals(payNotify.getResult_code())
    && "SUCCESS".equals(payNotify.getReturn_code())) {
   String wpayid = payNotify.getOut_trade_no();
   String money = payNotify.getTotal_fee();
   String opid = payNotify.getOpenid();
           
   Member member = ktdpService.findByOrderId(wpayid);
   ktdpService.update(member);
   tixianService.addwpay(opid, money, wpayid);
   //修改状态
   dingDanService.changemember(member,Float.parseFloat(money));
   dingDanService.gethavepuboid(wpayid);
   
   
   response.getOutputStream().write("success".getBytes());
} else {
   response.getOutputStream().write("error".getBytes());
  }
return null;
 }
 
 @RequestMapping(params="method=tijiaodd")
 public String toPay(HttpServletRequest request) throws UnsupportedEncodingException
 {
  // 1.得openId
  String openId = (String) request.getSession().getAttribute("openId");
  
  String orderId = UUID.randomUUID().toString().replaceAll("-", "");
  Member member = ktdpService.findByOpenId(openId);
  
  
   //  参数 
  String dizhi = request.getParameter("dizhi");
     dizhi = new String(dizhi.getBytes("ISO-8859-1"), "UTF-8");
     String ids = request.getParameter("ids");
     //System.out.println(ids);
     String money=request.getParameter("money");
  
      // 写订单
     String wpayId=tixianService.getwpayId();
     member.setOrderId(wpayId);
  ktdpService.update(member);
  String[] cid = ids.split("x");
     
     tixianService.addDindan(member, cid, dizhi,wpayId);
       
     
  // 2.去支付
  String notifyUrl = URLManager.getServerURL(request)+"/cardd.do";
  String json=JSSDKUtil.setPayParam(request, notifyUrl, money, wpayId, openId);
        request.setAttribute("json", json);
  // 4.调用微信支付
  return "/pay_example.jsp";
  
 }
 
}
//pay.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>微信支付</title>
<script type="text/javascript">
//json 数据
var x_json = ${json};
//调用微信JS api 支付
        function jsApiCall()
        {
            WeixinJSBridge.invoke(
                'getBrandWCPayRequest',
                 x_json,
                function(res){
                    //alert(res.err_code+res.err_desc+res.err_msg);
                    if (res.err_msg=="get_brand_wcpay_request:ok") //支付成功
                    {
                   
                    }
                    else if (res.err_msg=="get_brand_wcpay_request:cancel") //支付过程中用户取消
                    {
                      
                    }
                    else if (res.err_msg=="get_brand_wcpay_request:fail") //支付失败
                    {
                     
                    }
                   
                   
                }
            );
        }
function callpay()
        {
            if (typeof WeixinJSBridge == "undefined"){
                if( document.addEventListener ){
                    document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
                }else if (document.attachEvent){
                    document.attachEvent('WeixinJSBridgeReady', jsApiCall);
                    document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
                }
            }else{
                jsApiCall();
            }
        }
       
        onload  = function()
        {
          callpay();
        }
</script>
</head>
<body>
</body>
</html>

微信服务号开发之jssdk-微信充值、支付见解相关推荐

  1. 微信公众号开发之 “`高级接口`” 总结

    微信公众号开发之 "高级接口" 总结 代码如下: <?php// $weixin = new class_weixin("", "") ...

  2. php订阅号发送消息,关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题,_PHP教程...

    关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题, 相信很多人会跟我一样,token验证之后,发送消息给订阅号,没有消息返回. 以下,说一下我辛苦调试得到的解决办法 ...

  3. 微信公众号开发之VS远程调试

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 (四)微信公众号开发之网页授权获取用户基本信息 (五)微信公众号开发之网页中及 ...

  4. 微信公众号开发之H5页面跳转到指定的小程序

    前言: 最近公司有一个这样的需要,需要从我们在现有的公众号H5页面中加一个跳转到第三方小程序的按钮.之前只知道小程序之间是可以相互跳转的,今天查阅了下微信开发文档原来现在H5网页也支持小程序之间的跳转 ...

  5. 微信公众号开发之jfinal wxin

    jfinal wxing大家可能不太熟悉,他是jfinal框架(中国开源框架),用这个做微信公众号开发,非常快的,因为他已经把所有的微信的接口都集成里面了,我们主要是调用它的按口 要是你们PM要快点开 ...

  6. WeChat - 微信公众号开发之.Net Core接入

    .net进行微信公众号开发的例子好像比较少,这里做个笔记 首先,我们需要让微信能访问到我们的项目,所以要么需要有一个可以部署项目的连接到公网下的服务器,要么可以通过端口转发将请求转发到我们的项目,总之 ...

  7. 微信公众号开发之40164错误,获取不到access_token,获取不到jsapi_ticket错误问题...

    公司用开的微信签名接口突然间不能用了,调用的时候一直获取不到jsapi_ticket临时凭证,搞的我一脸懵逼,然后回想了下,接口代码没动过呀,公众号后台也只是设置过一次ip白名单,可是后来想了下,觉得 ...

  8. c# 微信公众号开发之token验证第三方服务器

    初入微信,才发现真的一坑又一坑,小程序之前坑可能是前辈填掉了,前辈走后,公司开始搞公众平台,需要公众号开发,唯一后端的我,顶了上去. 服务器配置验证token,从官方文档理解就是,官方发送signat ...

  9. 微信公众号开发之40164错误,导致获取不到access_token

    唉,刚解决access_token 失效的问题 ,又来一波 报错 40164  ['..IP...XXXX'] 第一想到的就是微信开发文档的全局返回码 但是就是没有 40164   烦啊!! 其实还是 ...

最新文章

  1. c++primer 5th第15章基础、课后习题自己解析、心得体会等
  2. java流类图结构_java学习之IO流(学习之旅,一)
  3. linux默认安装python_Linux下安装python
  4. mysql数据库 day06
  5. 使用HttpUnit进行集成测试
  6. cad的lisp程序大集合_大数据成神之路-Java高级特性增强(CopyOnWriteArraySet)
  7. stl------set
  8. python全栈测试题(一)
  9. asp和php漏洞,ASP_实例分析ASP上传漏洞入侵实战及扩展,【上传漏洞欺骗技术】 - phpStudy...
  10. 使用 Kubernetes 和 Kubeflow 扩展对象检测
  11. 数据集:各地区化妆品销量、人口数量和人均收入
  12. 常见的IC封装形式大全
  13. linux vga 分辨率低,通过 VGA 接口连接显示器时分辨率不正确
  14. 计算机网络工程用排线架,网络配线架使用和安装说明【图解】
  15. 一个由Dubbo Thread pool is EXHAUSTED引发的问题排查
  16. android 后台录制视频,Android实现视频录制
  17. 欧文分校计算机科学硕士项目,申请2019加州大学欧文分校计算机科学硕士要求都有哪些?...
  18. MATLAB参数估计 置信区间
  19. 动态规划 资源分配问题
  20. IE浏览DWG的CAD插件

热门文章

  1. matlab运行容量小,MATLAB中数据的大小与内存的关系
  2. 《Linux命令行与Shell脚本编程大全》读后感
  3. 周末和新润视频聊天了
  4. java实现数据挖掘_数据挖掘Apriori算法的java实现
  5. java在浏览器闪退_selenium chrome 浏览器闪退
  6. 实现移动端不同屏幕适配
  7. 四款小众但非常实用的软件推荐
  8. kafka segment file 解析
  9. 新浪微博如何设置半年可见?需要会员权限吗?
  10. 优达(Udacity)smartcab