omarlittle
omarlittle
采纳率0%
2017-10-24 08:36

java微信公众号支付详细源码和具体流程

200
  • java
  • 微信

java新人,现需要做微信公众号支付开发,提供的sdk文档只看懂大概,感谢各大神帮助

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • showbo GoCityPass新加坡曼谷通票 4年前

    很简单吧。公众号调用微信支付只需要生成签名就行了,sdk直接调用生成就行了

    主要是通知那块要自己加上逻辑,ResultNotify那个类里面增加,不懂java。。。最近弄了2个微信支付和支付宝的,下面是微信支付通知类处理的,大概逻辑如下,代码是C#的,自己参考下

             public override void ProcessNotify()
            {
                string cType = this.GetType().ToString();
                notifyData = GetNotifyData();
                //检查支付结果中transaction_id是否存在
                if (!notifyData.IsSet("transaction_id"))
                {
                    //若transaction_id不存在,则立即返回结果给微信支付后台
                    WxExtMethod.SendResponse("FAIL", "支付结果中微信订单号不存在", LogFunc.Error, cType, "The Pay result is error : " + notifyData.ToXml());
                }
                //校验通过商户订单是否存在
                string out_trade_no = notifyData.GetValue("out_trade_no").ToString();//需要32位长度
                string transaction_id = notifyData.GetValue("transaction_id").ToString();//微信订单
    
    
                //读数据库校验商户订单号是否存在,并且获取对应的微信订单号,如果已经存在不需要再查询
                string sql = "select o.tradeno,o.totalpay,o.eatdate,o.eattime,t.no,u.wxid from orders o"
                    +" left join tableno t on t.info_id=o.tableid"
                    +" left join users u on u.info_id=o.sendby"
                    +" where o.orderno='" + out_trade_no + "'";
    
                DBHelper db = new DBHelper();
                DataTable dt = db.FillDataTable(sql);
    
                if (dt.Rows.Count == 0) //商户订单不存在
                {               
                    WxExtMethod.SendResponse("FAIL", "内部订单不存在或者已经支付", LogFunc.Error, cType, "内部订单不存在或者已经支付【" + sql + "】",db);
                }
                else if (dt.Rows[0][0].ToString() == transaction_id)//订单支付过,重复通知直接返回成功
                {
                    WxExtMethod.SendResponse("SUCCESS", "OK", LogFunc.Info, cType, "商户订单已经成功支付过",db);
                }
                string eatdate = dt.Rows[0]["eatdate"].ToString(), eattime = dt.Rows[0]["eattime"].ToString()
                    , no = dt.Rows[0]["no"].ToString(), wxid = dt.Rows[0]["wxid"].ToString(), msttotalpay = dt.Rows[0][1].ToString();
                string totalpay = ((int)(float.Parse(msttotalpay) * 100)).ToString();
                dt.Dispose();
                //未支付过,查询订单信息,并判断是否成功,失败直接
                if (QueryOrder(transaction_id))
                {
                    //检查订单总额是否一致
                    if (orderData.GetValue("total_fee").ToString() == totalpay)
                    {
                        //更新订单状态,支付详情
                        sql = "update orders set tradeno='" + Format.Sql(transaction_id) + "',payrst='" + Format.Sql(orderData.ToJson()) + "',state=1 where orderno='" + out_trade_no + "'";
                        try
                        {
                            db.ExecuteNonQuery(sql);
                            db.CloseDB();
                            //发送微信客服信息
                            if(!string.IsNullOrEmpty(SiteConfig.wxMsgOrderSuccess))WeixinEvents.SendMessage(context,
                                SiteConfig.wxMsgOrderSuccess.Replace("{orderno}", out_trade_no).Replace("{pay}", msttotalpay).Replace("{time}", eatdate + (eattime == "1" ? "午餐" : "晚餐")).Replace("{no}", no)
                                , wxid);
                            WxExtMethod.SendResponse("SUCCESS", "OK", LogFunc.Info, cType, "成功支付并且更新数据库订单信息");
                        }
                        catch
                        {
                            WxExtMethod.SendResponse("FAIL", "更新订单状态信息失败", LogFunc.Error, cType, "更新订单状态信息失败【" + sql + "】", db);
                        }
                    }
                    else
                    {
                        WxExtMethod.SendResponse("FAIL", "金额不一致", LogFunc.Error, cType,
                             "金额(单位元)不一致,订单“" + totalpay + "”,返回“" + orderData.GetValue("total_fee").ToString() + "”", db);
                    }
                }
                else
                {//查询失败
                    WxExtMethod.SendResponse("FAIL", "订单查询失败", LogFunc.Error, cType, "Order query failure : " + orderData.ToXml(), db);
                }
    
            }
    
    点赞 评论 复制链接分享
  • listener_life listener_life 4年前

    我给你推荐一个详细的教程链接:http://blog.csdn.net/lyq8479/article/details/9841371
    这个是微信号公众号开发教程,你可以看一下

    点赞 评论 复制链接分享

相关推荐