java 后台 接入app微信支付
第一次微信支付接入,吐血,记录一下。
简单的支付,不涉及退款等更多操作
需要准备的参数:
- body:商品描述。
- nonce_str:随机字符串,UUID就好了。
- out_trade_no:商户订单号
- spbill_create_ip:终端IP。这个可以从请求头中拿到
- total_fee:支付金额。单位是分。
- 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
根据订单号查询数据库,只有是待支付的状态才进行操作 需要进行两次签名,比较坑 签名验证:
