123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- package com.szwl.service.impl;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.szwl.constant.AirwallexConstant;
- import com.szwl.model.bean.PaymentIntent;
- import com.szwl.model.bean.PaymentIntentRequestBody;
- import com.szwl.model.bo.R;
- import com.szwl.model.entity.TOrderAbroad;
- import com.szwl.model.utils.HttpClientSslUtils;
- import com.szwl.service.AirwallexService;
- import com.szwl.service.TOrderAbroadService;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang.StringUtils;
- import org.apache.http.entity.ContentType;
- import org.apache.http.message.BasicHeader;
- import org.springframework.stereotype.Service;
- import org.springframework.web.bind.annotation.RequestBody;
- import javax.annotation.Resource;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.math.BigDecimal;
- import java.sql.Array;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author wuhs
- * @since 2022-07-12
- */
- @Service
- @Slf4j
- public class AirwallexServiceImpl implements AirwallexService {
- @Resource
- TOrderAbroadService tOrderAbroadService;
- @Override
- public String getAccessToken() {
- // HttpResponse<String> response = Unirest.post("https://api-demo.airwallex.com/api/v1/authentication/login")
- // .header("Content-Type", "application/json")
- // .header("x-client-id", "W_ORsgAFTiuA9k2KuqZt8A")
- // .header("x-api-key", "8ac97c856c6d6cae7eb8fd05511f7a165be798d032381cb8026de7b4aa9aaee2e6312a8888a3474d783a40913ab6b55d")
- // .body("{
- // }").asString();
- String url = AirwallexConstant.url+"/api/v1/authentication/login";
- List<BasicHeader> headers = new ArrayList<>();
- BasicHeader header1 = new BasicHeader("x-client-id",AirwallexConstant.clientid);
- BasicHeader header2 = new BasicHeader("x-api-key",AirwallexConstant.apiKey);
- headers.add(header1);
- headers.add(header2);
- Map<String,String> map = new HashMap<>();
- String data = JSON.toJSONString(map);
- String response=null;
- try {
- response = HttpClientSslUtils.doPost(url, data,ContentType.APPLICATION_JSON,headers);
- JSONObject resultJson = JSONObject.parseObject(response);
- String token = resultJson.getString("token");
- if(StringUtils.isNotEmpty(token)){
- System.out.println("token="+token);
- return token;
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return response;
- }
- @Override
- public String caPaymentIntent(BigDecimal amount, String currency, String requestId, String merchantOrderId) {
- // 调用付款意向 api,返回payment intent id和client secret
- // 请求头
- String url = AirwallexConstant.url+"/api/v1/pa/payment_intents/create";
- List<BasicHeader> headers = new ArrayList<>();
- BasicHeader header1 = new BasicHeader("Authorization",AirwallexConstant.BEARER + this.getAccessToken());
- headers.add(header1);
- // body参数
- Map<String, Object> bodyMap = new HashMap<>();
- bodyMap.put("amount", amount);
- bodyMap.put("currency", currency);
- bodyMap.put("request_id", requestId);
- bodyMap.put("merchant_order_id", merchantOrderId);
- String data = JSON.toJSONString(bodyMap);
- log.info("请求body参数:" +data);
- Map<String, Object> responseMap = new HashMap<>();
- String resp = null;
- try {
- // 发送请求,获取响应结果
- resp = HttpClientSslUtils.doPost(url, data, ContentType.APPLICATION_JSON, headers);
- System.out.println(resp);
- responseMap = JSON.parseObject(resp);
- // return resp;
- } catch (Exception e) {
- e.printStackTrace();
- }
- String paymentIntentId = (String) responseMap.get("id");
- String clientSecret = (String) responseMap.get("client_secret");
- String env = AirwallexConstant.ENV;
- String mode = AirwallexConstant.MODE;
- // String locale = "it";
- String qrUrl = AirwallexConstant.QR_URL;
- return qrUrl + "?intent_id=" + paymentIntentId + "&client_secret=" + clientSecret + "¤cy=" + currency;
- }
- @Override
- public String createARefund(String requestId) {
- // 请求头
- String url = AirwallexConstant.url + "/api/v1/pa/refunds/create";
- List<BasicHeader> headers = new ArrayList<>();
- BasicHeader header1 = new BasicHeader("Authorization", AirwallexConstant.BEARER + this.getAccessToken());
- headers.add(header1);
- // body参数
- Map<String, Object> bodyMap = new HashMap<>();
- bodyMap.put("request_id", requestId);
- // bodyMap.put("amount", amount); // 退款金额
- // bodyMap.put("reason", reason); // 退款原因
- String data = JSON.toJSONString(bodyMap);
- String resp = null;
- try {
- HttpClientSslUtils.doPost(url, data, ContentType.APPLICATION_JSON, headers);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- return resp;
- }
- // @Override
- // public String refundWebhooks(HttpServletRequest request, HttpServletResponse response) {
- // return null;
- // }
- /**
- * 获取某笔支付订单的信息
- * @param intId
- * @return
- */
- @Override
- public String retrieveAPaymentIntent(Long intId) {
- String url = AirwallexConstant.url + "/api/v1/pa/payment_intents/{id}";
- // 请求头
- List<BasicHeader> headers = new ArrayList<>();
- new BasicHeader("Authorization", AirwallexConstant.BEARER + this.getAccessToken());
- // 请求体
- // Map<String, Object> bodyMap = new HashMap<>();
- // String data = JSON.toJSONString(bodyMap);
- String resp = null;
- try {
- resp = HttpClientSslUtils.doGet(url, ContentType.APPLICATION_JSON, headers);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- return resp;
- }
- @Override
- public R getFormSchema() {
- // POST /api/v1/beneficiary_form_schemas/generate 根据国家/付款方式查询表单字段,返回前端所需表单信息(对接付款国较多)
- // https://www.airwallex.com/docs/api#/Payouts/Beneficiaries/_api_v1_beneficiary_form_schemas_generate/post
- // HttpResponse<String> response = Unirest.post("https://api-demo.airwallex.com/api/v1/beneficiary_form_schemas/generate")
- // .header("Content-Type", "application/json")
- // .header("Authorization", "Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0b20iLCJyb2xlcyI6WyJ1c2VyIl0sImlhdCI6MTQ4ODQxNTI1NywiZXhwIjoxNDg4NDE1MjY3fQ.UHqau03y5kEk5lFbTp7J4a-U6LXsfxIVNEsux85hj-Q")
- // .header("headers", "[object Object]")
- // .body("{
- // \"account_currency\": \"USD\",
- // \"bank_country_code\": \"US\",
- // \"entity_type\": \"PERSONAL\",
- // \"local_clearing_system\": \"ACH\",
- // \"payment_method\": \"LOCAL\"
- // }")
- // .asString();
- return null;
- }
- @Override
- public R getAPISchema() {
- // POST /api/v1/beneficiary_api_schemas/generate 动态获取指定国家、支付方式,返回创建收款人请求所需字段
- // https://www.airwallex.com/docs/api#/Payouts/Beneficiaries/_api_v1_beneficiary_api_schemas_generate/post
- return null;
- }
- @Override
- public String createBeneficiary (Map<String, Object> requestBody) {
- // POST /api/v1/beneficiaries/create 创建收款人,返回收款人ID
- // https://www.airwallex.com/docs/api#/Payouts/Beneficiaries/_api_v1_beneficiaries_create/post
- Map beneficiary = new HashMap();
- Object address = null;
- ArrayList paymentMethods = new ArrayList<>();
- String beneficiaryId = "fsdfsd";
- return beneficiaryId;
- }
- @Override
- public String createPayout() {
- // POST /api/v1/payments/create 创建付款交易,返回创建结果paymentID
- // https://www.airwallex.com/docs/api#/Payouts/Payments/_api_v1_payments_create/post
- String paymentId = "111";
- return paymentId;
- }
- @Override
- public R getPaymentById(String paymentId) {
- // GET /api/v1/payments/{payment_id} 查询支付结果,返回支付结果状态
- // https://www.airwallex.com/docs/api#/Payouts/Payments/_api_v1_payments__payment_id_/get
- return null;
- }
- // Cancel、Retry
- }
|