支付宝标准版
生成一个支付宝付款二维码,顾客打开手机支付宝扫码,付款成功后,开发者将收到推送此订单的付款通知。
一、请求地址
二、请求参数
| 参数名 | 类型 | 说明 | 示例 |
|---|---|---|---|
| appid | String | 合作伙伴Id | |
| timestamp | String | 时间戳 | 请求时的时间,unixtime格式 |
| mch_id | String | 商户ID | 向蜂巢客服咨询获取 |
| ext_trade_no | String | 开发者传入的订单 , 比如1586420573605 | 不可传入重复的订单号,此订单号在付款完成后,推送回调时一同返回,开发者可以根据此订单号进行业务逻辑处理。 |
| amount | int | 付款金额,单位分 | 比如 350, 表示3.5 元。 |
| attach | String | 附加参数,200字以内 | 支付完成回调时原样返回给开发者。 |
| body | String | 商品说明 | |
| notify_url | String | 支付完成后的回调通知Url | 比如, http(s)://yoururl.com/paynotify ,确保公网可访问 |
| agent_channel | int | 支付渠道,填写 4 | 支付宝签约版 |
| sign | String | 签名 | 对各参数使用提供的AppSecret进行签名,签名逻辑具体实现见示例代码 |
三、请求示例
//支付金额 (单位分) String amount ="1500"; String mchId ="208870156224224"; //签约的商户号 // 确保传入的开发者订单号唯一, 订单号生成规则开发者可自定, 修改 String ext_trade_no =String.valueOf(System.currentTimeMillis()); // 扩展参数,付款成功时回调给开发者时会原样返回,根据自己需求填写或为空。 String attach ="biz=sms"; // 订单标题 String body ="故宫3日游团票"; String agentChannel = "4"; // 回调通知url,开发者自己的服务器Url String notify_url = Config.PayNotifyUrl;
//************************** 请求参数填写结束 ***************************************/
String result =""; CloseableHttpClient httpclient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost( Config.TradePreCreate );
//业务参数 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("agent_channel",agentChannel );
//参数签名 try { data.put("sign", Utils.Sign(data, Config.AppSecret)); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>(); for (Map.Entry<String, String> entry : data.entrySet()) { params.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } //发起POST请求 try { httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); HttpResponse httpResponse = httpclient.execute(httpPost); if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { result = EntityUtils.toString(httpResponse.getEntity()); JSONObject jsonObject = JSON.parseObject(result); Integer code = jsonObject.getInteger("code"); String message = jsonObject.getString("message"); JSONObject dataObject = jsonObject.getJSONObject("data"); String qr_url = dataObject.getString("qr_url"); System.out.println("qr_url:"+ qr_url);
} else { result = ("doPost Error Response: " + httpResponse.getStatusLine().toString()); } } catch (Exception e) { e.printStackTrace();
}
System.out.println(result);四、接口返回结果
{ "code": 0, "message": "ok", "data": { "qr_url": "https://static.baolai.la/qp-pay/VlwHWf45kDwgZVdUV7p0.png" }}五、返回参数说明
| 参数名 | 类型 | 说明 | 示例 |
|---|---|---|---|
| code | int | 0时为成功,非0为失败 | |
| message | String | 消息 | code非0时,会包含错误的出错信息 |
| qr_url | String | 生成的付款二维码 | 成功才有qr_url 值 |
开发者获取到付款码的Url后,可在自己的系统或网站进行展示,供用户扫码支付。 用户扫码付款后,蜂巢将会推送付款通知,如何处理付款回调通知,请见支付回调通知。