成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

支付寶app支付總結(jié)

zzbo / 2895人閱讀

摘要:公鑰和私鑰的生成通過(guò)支付寶提供的工具即可下載并生成公鑰和私鑰,私鑰自己保留,公鑰要上傳到支付寶賬戶所在的應(yīng)用即可。支付寶支付通知接口支付寶支付結(jié)果通知獲取支付寶過(guò)來(lái)反饋信息亂碼解決,這段代碼在出現(xiàn)亂碼時(shí)使用。

1、app公鑰和私鑰的生成
通過(guò)支付寶提供的工具即可下載并生成公鑰和私鑰,私鑰自己保留,公鑰要上傳到支付寶賬戶所在的應(yīng)用即可。

2、接下來(lái)就是通過(guò)app支付api調(diào)后臺(tái)接口,后臺(tái)通過(guò)公鑰和私鑰等 一系列的參數(shù)生成一段鍵值對(duì)給前端APP:

package com.qtay.gls.service.impl;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.qtay.gls.dao.entity.AlipayTradeModel;
import com.qtay.gls.service.IPayService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class PayService implements IPayService {

    @Value("${alipay.app_id}")
    private String appId;

    @Value("${alipay.app_private_key}")
    private String appPrivateKey;

    @Value("${alipay.charset}")
    private String charset;

    @Value("${alipay.alipay_public_key}")
    private String alipayPublicKey;

    @Value("${alipay.sign_type}")
    private String signType;

    @Value("${alipay.notify_url}")
    private String notifyUrl;

    @Value("${alipay.server_url}")
    private String serverUrl;

    @Value("${alipay.format}")
    private String format;

    @Value("${alipay.product_code}")
    private String productCode;
    /**
     * 驗(yàn)簽
     * @param alipayTradeModel
     * @return
     * @throws AlipayApiException
     */
    @Override
    public String getSign(AlipayTradeModel alipayTradeModel) throws AlipayApiException {

        //實(shí)例化客戶端
        AlipayClient alipayClient = new DefaultAlipayClient(
                serverUrl,
                appId,
                appPrivateKey,
                format,
                charset,
                alipayPublicKey,
                signType);

        //實(shí)例化具體API對(duì)應(yīng)的request類,類名稱和接口名稱對(duì)應(yīng),當(dāng)前調(diào)用接口名稱:alipay.trade.app.pay
        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
        //SDK已經(jīng)封裝掉了公共參數(shù),這里只需要傳入業(yè)務(wù)參數(shù)。以下方法為sdk的model入?yún)⒎绞?model和biz_content同時(shí)存在的情況下取biz_content)。
        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
        model.setBody(alipayTradeModel.getBody());
        model.setSubject(alipayTradeModel.getSubject());
        model.setOutTradeNo(alipayTradeModel.getOutTradeNo());
        model.setTimeoutExpress(alipayTradeModel.getTimeoutExpress());
        model.setTotalAmount(alipayTradeModel.getTotalAmount());
        model.setProductCode(productCode);

        request.setBizModel(model);
        request.setNotifyUrl(notifyUrl);
        //這里和普通的接口調(diào)用不同,使用的是sdkExecute
        AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
        System.out.println(response.getBody());//就是orderString 可以直接給客戶端請(qǐng)求,無(wú)需再做處理。
        return response.getBody();
    }
}

3、前端APP支付成功之后會(huì)調(diào)上面設(shè)置的notifyUrl(注意如果設(shè)置了權(quán)限要取消該url的jwt用戶認(rèn)證,我這里的url是:/alipay/notify)。調(diào)用的時(shí)候這里有一個(gè)坑,也是我遇到的坑,在這里跟大家分享一下:
1)我的這個(gè)controller存在亂碼問(wèn)題,所以要設(shè)置

@RequestMapping(value = "/alipay", produces = "application/json; charset=utf-8")

否則 會(huì)報(bào)亂碼錯(cuò)誤,空指針什么的

18-01-04 13:49:42.755 DEBUG [http-nio-9090-exec-1] o.s.web.servlet.DispatcherServlet - Could not complete request
java.lang.NullPointerException: null
.antMatchers("/alipay/**").permitAll()

再一個(gè)就是,如果你頁(yè)面本身就出現(xiàn)亂碼問(wèn)題,再通過(guò)下面這段代碼設(shè)置也是沒(méi)有用的,切記!

            //亂碼解決,這段代碼在出現(xiàn)亂碼時(shí)使用。
            valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
package com.qtay.gls.controller;

import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping(value = "/alipay", produces = "application/json; charset=utf-8")
public class AlipayController {

    private Logger log = LoggerFactory.getLogger(AlipayController.class);

    @Value("${alipay.alipay_public_key}")
    private String alipayPublicKey;

    @Value("${alipay.charset}")
    private String charset;

    @Value("${alipay.sign_type}")
    private String signType;

    /**
     * 支付寶支付通知接口:
     *
     * @param
     * @return
     */
    @PostMapping("/notify")
    public String notify(HttpServletRequest request) throws AlipayApiException, UnsupportedEncodingException {
        log.info("支付寶支付結(jié)果通知" + request.getParameterMap().toString());
        //獲取支付寶POST過(guò)來(lái)反饋信息
        Map params = new HashMap<>();
        Map requestParams = request.getParameterMap();
        for (Object o : requestParams.keySet()) {
            String name = (String) o;
            String[] values = (String[]) requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i]
                        : valueStr + values[i] + ",";
            }
            //亂碼解決,這段代碼在出現(xiàn)亂碼時(shí)使用。
//            valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
            params.put(name, valueStr);
            log.info(name + "=" + valueStr);
        }
        //切記alipaypublickey是支付寶的公鑰,請(qǐng)去open.alipay.com對(duì)應(yīng)應(yīng)用下查看。
        //boolean AlipaySignature.rsaCheckV1(Map params, String publicKey, String charset, String sign_type)
        boolean signVerified = AlipaySignature.rsaCheckV1(params, alipayPublicKey, charset, signType);
        //todo:flag為什么是false
        log.info("================== signVerified ==================" + signVerified);
        if (signVerified) {
            if ("TRADE_SUCCESS".equals(params.get("trade_status"))) {
                //付款金額
                String amount = params.get("buyer_pay_amount");
                //商戶訂單號(hào)
                String out_trade_no = params.get("out_trade_no");
                //支付寶交易號(hào)
                String trade_no = params.get("trade_no");

                log.info("amount=" + amount + ",out_trade_no=" + out_trade_no + ",trade_no=" + trade_no);
                return "success";
            }
        }
        return "fail";
    }
}

參考文章:
1、一步一步帶你完成支付寶支付功能的集成(超詳細(xì))
2、spring Boot 中文返回給瀏覽器亂碼 解析成問(wèn)號(hào)?? fastJson jackJson

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68128.html

相關(guān)文章

  • vue2.0與支付個(gè)人總結(jié)

    摘要:最近在使用寫,中要求可以實(shí)現(xiàn)線上支付,研究了微信支付與支付寶支付。其實(shí)支付寶的支付原理很簡(jiǎn)單,無(wú)論是支付還是原生支付前臺(tái)只需要使用服務(wù)器返回的數(shù)據(jù)調(diào)起支付就可以了。 最近在使用vue寫webapp,app中要求可以實(shí)現(xiàn)線上支付,研究了微信H5支付與支付寶H5支付。其中微信H5支付處在內(nèi)測(cè)階段,需要申請(qǐng),按照格式寫了郵件七個(gè)工作日也沒(méi)得到回復(fù)郵件,據(jù)說(shuō)微信H5支付對(duì)于單量和交易額有要求,...

    sherlock221 評(píng)論0 收藏0
  • 2016年終工作總結(jié)

    摘要:由于初版需求及開(kāi)發(fā)工作都沒(méi)有參與,在接手項(xiàng)目后過(guò)了遍前端結(jié)構(gòu)發(fā)現(xiàn)所有交互及組件都是現(xiàn)擼,并未使用市面上已有的優(yōu)秀前端框架從我個(gè)人角度理解上出發(fā),后續(xù)需求變更中當(dāng)需要實(shí)現(xiàn)某些常用組件樣式或交互時(shí),基本上都需要現(xiàn)擼或者尋找合適的組件。 2016悄無(wú)聲息的過(guò)去了,再過(guò)不久便是農(nóng)歷新年 這幾天相對(duì)清閑梳理了一下去年所做的工作,希望在新的一年能發(fā)展的更好 今年一共研發(fā)或升級(jí)了五款產(chǎn)品:合伙人、奪...

    hoohack 評(píng)論0 收藏0
  • 個(gè)人支付接口現(xiàn)狀分析——總有一款適合你

    摘要:支付寶支持網(wǎng)站支付,支付,支付和當(dāng)面付,但是要想接入網(wǎng)站,需要網(wǎng)站備案,并且還要有營(yíng)業(yè)執(zhí)照??墒?,這個(gè)途徑后來(lái)經(jīng)過(guò)證實(shí),支付寶已經(jīng)停用。缺點(diǎn)也是相當(dāng)?shù)拿黠@只有支付寶可以用這種方式,因?yàn)槲⑿攀窃趦?nèi)部有一個(gè)公眾號(hào)形式的提示。 0.背景 前段時(shí)間準(zhǔn)備把自己的博客做成付費(fèi)閱讀或者訂閱的形式,雖然沒(méi)想著要贏利多少錢,但是起碼養(yǎng)的起自己站點(diǎn)域名服務(wù)器費(fèi)用即可。但是大家都懂,草根站長(zhǎng),又沒(méi)公司,想...

    tylin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<