java新人,现需要做微信公众号支付开发,提供的sdk文档只看懂大概,感谢各大神帮助
我给你推荐一个详细的教程链接:http://blog.csdn.net/lyq8479/article/details/9841371
这个是微信号公众号开发教程,你可以看一下
很简单吧。公众号调用微信支付只需要生成签名就行了,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);
}
}