微信小程序支付

商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易会话标识后再按Native、JSAPI、App等不同场景生成交易串调起支付。

 

请求地址:

https://kf.fw199.com/gateway/partner/pay/wx/personal/jsapi

二、请求地址:

参数名 类型 说明 示例
appid String 合作伙伴Id
timestamp String 时间戳 请求时的时间,unixtime格式
mch_id String 商户ID 向蜂巢客服咨询获取
ext_trade_no String 开发者传入的订单 , 比如1586420573605 不可传入重复的订单号,此订单号在付款完成后,推送回调时一同返回,开发者可以根据此订单号进行业务逻辑处理。
ext_buyer String 开发者传入的下单购买者标识 手机号,邮箱,用户ID等任意用户标识。
amount int 付款金额,单位分 比如 350, 表示3.5 元。
attach String 附加参数,200字以内 支付完成回调时原样返回给开发者。
body String 商品说明
notify_url String 支付完成后的异步回调通知Url 比如, http(s)://yoururl.com/paynotify ,确保公网可访问
sub_appid String 必填, 用户在子商户AppID下的唯一标识 商户自己的微信小程序appId
sub_openid String 必填, 用户在子商户AppID下的唯一标识 买家在商户微信小程序里的openid
sign String 签名 对各参数使用提供的AppSecret进行签名,签名逻辑具体实现见示例代码

请求示例

  @Test  
    public void PayWXCreateH5Pay() throws Exception {  
        //支付金额 (单位分)  
        String  amount ="1000";  
        String  mchId  ="163588 "; //由蜂巢提供的微信商户号,向客服咨询
        // 确保传入的开发者订单号唯一, 订单号生成规则开发者可自定,  修改  
        String ext_trade_no =String.valueOf(System.currentTimeMillis());  
        // 扩展参数,付款成功时回调给开发者时会原样返回,根据自己需求填写或为空。  
        String attach ="";  
        // 订单标题  
        String body ="支付测试商品08";  
        // 回调通知url,开发者自己的服务器Url  
        String notify_url = Config.PayNotifyUrl;  
        //业务参数  
        Map<String, String> data = new HashMap<String, String>();  
        data.put("appid",  Config.AppId);  
        Long timestamp = System.currentTimeMillis() / 1000;  
        data.put("timestamp", timestamp.toString());  
        data.put("ext_trade_no",ext_trade_no );  
        data.put("mch_id",mchId );  
        data.put("amount",amount );  
        data.put("attach",attach );  
        data.put("body" , body );  
        data.put("notify_url",notify_url ); 
       data.put("sub_appid","wx168f3faec71f8488" ); 
       data.put("sub_openid","oR-0h4_3s-sBC9zs1go4xg81yWJh" ); 
        data.put("sign", Utils.Sign(data, Config.AppSecret   ));  
        String result = doHttpRequest(Config.PayWXPersonalCreateH5PayUrl,data);  
       System.out.println("result:"+result);  
       JSONObject rsp = JSON.parseObject(result);  
       if (rsp.getInteger("code") == 0){  
           JSONObject rspData = rsp.getJSONObject("data");  
           String payUrl = URLDecoder.decode(rspData.getString("h5pay_url"),"utf-8");  
           System.out.println("请在手机浏览器点击此Url跳去支付:"+payUrl);  
       } else {  
           System.out.println("返回错误:" + rsp.getString("message"));  
       }   
    }

三、接口返回结果:

{
    "code": 0,
    "message": "ok",
    "data": {
        "appId": "wx168f3faec71f846a",
        "nonceStr": "40D082E2C6AC528A730B85911DACC54D",
        "package": "prepay_id=wx151958164112143d8faf3c56da61a40000",
        "paySign": "oGrG3lP+8nfif41mffYDvA7np6Z7Mfz/PULBMURh9vwszCymlNAajPP/GEaEJ2d1J689WSa6I8C/TrVHCOnFj5RTh2/0WmBLdFkC7jfm28K33LqTUbs9dOUSBSoaUYu/YC9iI4YXgo41Mqav9KrhqnJam+qVz/lsv00tNf3OZZf9GC9ceT70JqK+3iZguOBX/4EcSJqMFX4CuV8YVSk/kyzv+RgD47HX8k4ZC+cAGGPrkGwUDse6QRz+/dkcrvccJZ0tMglwT1ZtWGIH2kpkXvL6SvtPeqXh6EEl8GLU91/ELu+H8DIp+yUdwQipWCujWpS4bDu6G+3JlD2q3w4leg==",
        "prepayId": "wx151958164112143d8faf3c56da61a40000",
        "signType": "RSA",
        "timeStamp": "1784116696"
    },
    "trace_id": "03ae9774-90d1-4773-a5d7-ca1914e57e62"
}

返回参数说明

字段 类型 说明
code int 业务状态码。0 表示成功,非 0 表示失败
message string 结果描述。成功时为 ok,失败时为具体错误信息
data object 成功时返回调起支付参数;失败时通常为空或不存在
trace_id string 本次请求追踪 ID,排查问题时提供给蜂巢客服

data 字段(调起微信支付)

字段 类型 说明
appId string 调起支付使用的小程序 AppID。
timeStamp string 时间戳(秒,字符串)。用于签名,须原样传给 wx.requestPayment
nonceStr string 随机字符串。用于签名,须原样传给 wx.requestPayment
package string 预支付交易会话标识,固定格式:prepay_id={prepayId}
signType string 签名类型,固定为 RSA
paySign string 支付签名。由蜂巢按微信支付 V3 规则生成,小程序端直接透传,勿自行重算
prepayId string 微信预支付交易会话 ID,有效期 2 小时。package 字段中已包含,也可单独读取

 

四、小程序调起示例

收到接口返回的支付所要的数据,在小程序里调用wx.requestPayment方法,传入参数,唤起微信收银台。   

wx.request({
  url: 'https://your-api.com/pay/wx/jsapi', //这是你自己业务系统提供api,按实修改。
  method: 'POST',
  data: { orderId: '20260715001' }, // 必要入参传入自己的业务系统,按实修改。
  success(res) {
    if (res.data.code !== 0) {
      wx.showToast({ title: res.data.message, icon: 'none' });
      return;
    }
    const d = res.data; // 蜂巢网关返回的 data
    wx.requestPayment({
      timeStamp: d.timeStamp,
      nonceStr: d.nonceStr,
      package: d.package,
      signType: d.signType,
      paySign: d.paySign,
      success() {
        // 仅表示调起成功,最终以 notify_url 异步通知为准
        wx.showToast({ title: '支付成功', icon: 'success' });
      },
      fail(err) {
        if (err.errMsg.indexOf('cancel') !== -1) {
          wx.showToast({ title: '已取消支付', icon: 'none' });
        } else {
          wx.showToast({ title: '支付失败', icon: 'none' });
        }
      }
    });
  }
});

上述 5 个字段(timeStamp、nonceStr、package、signType、paySign)须与接口返回完全一致,不可修改或重新签名。
支付结果以微信异步通知 + 商户侧查单为准;wx.requestPayment 的 success 仅表示调起成功,不代表资金已到账。建议小程序里弹出支付成功以后,跳到订单状态页面轮询订单支付状态是否真正成功。

 

文档更新时间: 2026-07-15 20:32   作者:admin