今天晚上12点部署生产项目,又是个不眠夜。
之前整的好多东西都忘光了,还是记录下来吧。
跟对接支付宝支付差不多,地址:小程序支付能力介绍 | 小程序
开通流程:
1.先要去支付宝开放平台,创建小程序。
2.拿到创建好的APPID。
3.需要开通相关能力,如果支付能力,签约能力等,管理 - > 能力管理页面
4.在开发设置拿到支付网关地址,设置公钥私钥,白名单信息等
5.使用支付宝开放平台开发助手,生成公钥私钥
6.接口内容,可加密可不加密都行,
7.下载服务端sdk地址:概述 | 网页&移动应用 我用的是通用版,把依赖放到pom里就可以了
8.根据 “统一收单交易创建接口” 接口写就行了
开发流程:
1、用户在小程序上点击 "充值" 按钮,调用后端服务接口,服务接口调用支付网关,
2、支付网关根据小程序的appid和支付宝公钥、小程序私钥调用支付宝java通用版SDK(小程序需要一个支付宝的uuid就是三方登录时获取的支付宝user_id),获取到tradeNo支付宝交易流水号,将流水号返给后台服务,然后后台服务返给小程序,
3、小程序根据流水号去唤起支付宝收银台,完成请求操作后,
4、支付宝服务端会异步通知支付网关,然后支付网关通知服务后台是否支付成功了,
5、然后做自己的业务逻辑处理,更新表呀,发送通知呀等操作
SDK部分代码:
请求:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
request.setNotifyUrl("");
JSONObject bizContent = new JSONObject();
bizContent.put("out_trade_no", "20210817010101003");
bizContent.put("total_amount", 0.01);
bizContent.put("subject", "测试商品");
bizContent.put("buyer_id", "2088102146225135");
bizContent.put("timeout_express", "10m");
商品明细信息,按需传入
//JSONArray goodsDetail = new JSONArray();
//JSONObject goods1 = new JSONObject();
//goods1.put("goods_id", "goodsNo1");
//goods1.put("goods_name", "子商品1");
//goods1.put("quantity", 1);
//goods1.put("price", 0.01);
//goodsDetail.add(goods1);
//bizContent.put("goods_detail", goodsDetail);
扩展信息,按需传入
//JSONObject extendParams = new JSONObject();
//extendParams.put("sys_service_provider_id", "2088511833207846");
//bizContent.put("extend_params", extendParams);
结算信息,按需传入
//JSONObject settleInfo = new JSONObject();
//JSONArray settleDetailInfos = new JSONArray();
//JSONObject settleDetail = new JSONObject();
//settleDetail.put("trans_in_type", "defaultSettle");
//settleDetail.put("amount", 0.01);
//settleDetailInfos.add(settleDetail);
//settleInfo.put("settle_detail_infos", settleDetailInfos);
//bizContent.put("settle_info", settleInfo);
二级商户信息,按需传入
//JSONObject subMerchant = new JSONObject();
//subMerchant.put("merchant_id", "2088000603999128");
//bizContent.put("sub_merchant", subMerchant);
业务参数信息,按需传入
//JSONObject businessParams = new JSONObject();
//businessParams.put("busi_params_key", "busiParamsValue");
//bizContent.put("business_params", businessParams);
营销信息,按需传入
//JSONObject promoParams = new JSONObject();
//promoParams.put("promo_params_key", "promoParamsValue");
//bizContent.put("promo_params", promoParams);
request.setBizContent(bizContent.toString());
AlipayTradeCreateResponse response = alipayClient.execute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
响应:
{
"alipay_trade_create_response": {
"code": "10000",
"msg": "Success",
"out_trade_no": "20150423001001",
"trade_no": "2015042321001004720200028594"
},
"sign": "ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE"
}
这里说一下支付宝和支付宝小程序的区别,支付宝是将会话id返给前端,小程序是将tradeNo交易流水号返给前端,在有就是支付宝小程序需要一个用户自己的uuid(三方登录时获取的支付宝user_id),其他基本一样。