WechatPay.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package utility.wechat.wechatpay;
  2. import common.BaseClass;
  3. import common.YosException;
  4. import common.data.Row;
  5. import common.data.Rows;
  6. import common.data.db.DBConnect;
  7. import utility.wechat.WeChatHelper;
  8. import utility.wechat.wechatpay.POJO.*;
  9. import java.util.ArrayList;
  10. public class WechatPay extends BaseClass {
  11. private String appid;
  12. private WechatPay() {
  13. }
  14. /**
  15. * 构造函数,创建支付订单必须调用该构造函数
  16. *
  17. * @param systemclient 微信支付端名称
  18. * @throws YosException
  19. */
  20. public WechatPay(String systemclient) throws YosException {
  21. DBConnect dbConnect = new DBConnect();
  22. Rows rows = dbConnect.runSqlQuery("select appid,secret,mch_id from sys_wechatapp where systemclient='" + systemclient + "'");
  23. if (rows.isNotEmpty()) {
  24. this.appid = rows.get(0).getString("appid");
  25. }
  26. }
  27. /**
  28. * 创建一个微信小程序支付订单
  29. *
  30. * @param orderno 本地订单
  31. * @param trade_type APP、JSAPI、
  32. * @param openid 用户openid
  33. * @param custip 客户端IP地址
  34. * @param title 支付标题
  35. * @return
  36. */
  37. public String createPayOrder(String orderno, String trade_type, String openid, String custip, String title,int order_amount) throws YosException {
  38. /**
  39. * 开始创建微信支付订单
  40. */
  41. CreateOrderRequest order = new CreateOrderRequest();
  42. order.setAppid(this.appid);
  43. order.setBody(title);
  44. order.setMch_id(WeChatHelper.mch_id);
  45. order.setNotify_url(WeChatHelper.notify_url);//支付结果通知地址
  46. order.setOpenid(openid);
  47. order.setOut_trade_no(orderno+"J");
  48. order.setSpbill_create_ip(custip);
  49. order.setTotal_fee(order_amount);
  50. order.setTrade_type(trade_type);//APP、JSAPI、
  51. String response = order.getOrderResponseV3(WeChatHelper.mch_key,title);
  52. return response;
  53. }
  54. /**
  55. * 订单查询
  56. *
  57. * @param out_trade_no 商户订单号
  58. * @return
  59. */
  60. public void queryOrder(String out_trade_no) throws YosException {
  61. QueryOrderRequest queryOrderRequest = new QueryOrderRequest();
  62. queryOrderRequest.setAppid(WeChatHelper.appid);
  63. queryOrderRequest.setMch_id(WeChatHelper.mch_id);
  64. queryOrderRequest.setOut_trade_no(out_trade_no);
  65. updatePayOrder(queryOrderRequest.getOrder(WeChatHelper.mch_key));
  66. }
  67. /**
  68. * 订单关闭
  69. *
  70. * @param out_trade_no 商户订单号
  71. * @return
  72. */
  73. public CloseOrderResponse closeOrder(String out_trade_no) {
  74. CloseOrderRequest closeOrderRequest = new CloseOrderRequest();
  75. closeOrderRequest.setAppid(appid);
  76. closeOrderRequest.setMch_id(WeChatHelper.mch_id);
  77. closeOrderRequest.setOut_trade_no(out_trade_no);
  78. return closeOrderRequest.getOrderResponse(WeChatHelper.mch_key);
  79. }
  80. /**
  81. * 更新本地数据库的订单信息
  82. */
  83. public static boolean updatePayOrder(WechatOrder wechatOrder) throws YosException {
  84. WechatPay wechatPay = new WechatPay();
  85. String trade_state = wechatOrder.getTrade_state();
  86. String out_trade_no = wechatOrder.getOut_trade_no();
  87. Rows sys_payorderRows = wechatPay.dbConnect.runSqlQuery("select * from sys_payorder where orderno='" + out_trade_no + "'");
  88. for (Row sys_payorderRow : sys_payorderRows) {
  89. ArrayList<String> sqllist = new ArrayList<>();
  90. sqllist.add("update sys_payorder set wechatpayorder='" + wechatOrder + "' where orderno='" + out_trade_no + "'");
  91. if ("SUCCESS".equalsIgnoreCase(trade_state)) {
  92. sqllist.add("update sys_payorder set ispaid=1,paytime=" + wechatOrder.getTime_end() + " where orderno='" + out_trade_no + "'");
  93. }
  94. wechatPay.dbConnect.runSqlUpdate(sqllist);
  95. }
  96. return true;
  97. }
  98. }