java 后台 接入app微信支付


第一次微信支付接入,吐血,记录一下。
简单的支付,不涉及退款等更多操作

需要准备的参数:

  1. body:商品描述。
  2. nonce_str:随机字符串,UUID就好了。
  3. out_trade_no:商户订单号
  4. spbill_create_ip:终端IP。这个可以从请求头中拿到
  5. total_fee:支付金额。单位是分。
  6. trade_type:交易类型。这里我填JSAPI

pom.xml

<!--wxpay-sdk-->
<dependency>
	<groupId>com.github.wxpay</groupId>
	<artifactId>wxpay-sdk</artifactId>
	<version>0.0.3</version>
</dependency>

配置OurWxPayConfig

实现sdk的WXPayConfig ,主要配置appid,商户号,秘钥

import com.github.wxpay.sdk.WXPayConfig;
import org.springframework.context.annotation.Configuration;
import java.io.InputStream;

/** 配置我们自己的信息  */
@Configuration
public class OurWxPayConfig implements WXPayConfig {
          
   

    /** 设置我们自己的appid
     * 商户号
     * 秘钥
     * */

    @Override
    public String getAppID() {
          
   
        return "*****************";
    }

    @Override
    public String getMchID() {
          
   
        return "*********";
    }

    @Override
    public String getKey() {
          
   
        return "***********";
    }

    @Override
    public InputStream getCertStream() {
          
   
        return null;
    }

    @Override
    public int getHttpConnectTimeoutMs() {
          
   
        return 0;
    }

    @Override
    public int getHttpReadTimeoutMs() {
          
   
        return 0;
    }
}

Controller层

传入订单Id,数据以json串返回给app前端

@RequestMapping("/wxpay")
    public String getPayOrderInfo(@RequestRequestParam String orderId) throws Exception {
          
   
        if (logger.isInfoEnabled()) {
          
   
            logger.info("----- PaymentController.getPayOrderInfo start -----");
        }
        logger.info(hospitalOrder.toString());
        JSONObject res = new JSONObject();
        try {
          
   
            Map<String,String> payOrderInfo = paymentService.getWxPayOrderInfo(hospitalOrder);
            res.put("data", payOrderInfo);
            res.put(Constant.CODE, APICode.CODE_12000.getCode());
            res.put(Constant.DESC, APICode.CODE_12000.getDesc());
        } catch (Exception e) {
          
   
            logger.error("获取支付订单信息异常", e);
            res.put(Constant.CODE, APICode.ERR_14039.getCode());
            res.put(Constant.DESC, APICode.ERR_14039.getDesc());
        }
        if (logger.isInfoEnabled()) {
          
   
            logger.info("----- PaymentController.getPayOrderInfo end -----");
        }
        logger.info(res.toString());
        return res.toJSONString();
    }

Serviceimpl

根据订单号查询数据库,只有是待支付的状态才进行操作 需要进行两次签名,比较坑 签名验证:

回调

经验分享 程序员 微信小程序 职场和发展