国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信H5支付及通知回調(diào)

這篇具有很好參考價(jià)值的文章主要介紹了微信H5支付及通知回調(diào)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一. H5支付配置

1.在微信商戶平臺(tái)中進(jìn)行登錄并申請相關(guān)功能和配置

1.1微信商戶平臺(tái)https://pay.weixin.qq.com/index.php/core/home/loginreturn_url=%2F

登錄并配置,在商戶平臺(tái)上 - 產(chǎn)品中心 - 開通相關(guān)的產(chǎn)品,比如我這里使用的是 H5支付文章來源地址http://www.zghlxwxcb.cn/news/detail-531071.html

1.2 然后配置相關(guān)的參數(shù)
//APPID
//mchid(商戶號(hào))
//API key(V3的密鑰)
//privateKey(商戶私鑰)
//mchSerialNo (證書序列號(hào))
//以上參數(shù)的配置說明可以參考微信文檔  https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_6_1.shtml

二.開發(fā)

2.1導(dǎo)入相關(guān)依賴
<dependency>
	<groupId>com.github.wechatpay-apiv3</groupId>
	<artifactId>wechatpay-apache-httpclient</artifactId>
	<version>0.2.2</version>
</dependency>	
2.2 代碼編寫
//此方法為微信的H5支付
//cashNum      微信支付的金額單位是 分,如果使用的元,在這里需要轉(zhuǎn)換。
//orderNo      商戶的訂單號(hào),在同一個(gè)商戶號(hào)下必須是唯一的。
//redirect_url 支付成功后的跳轉(zhuǎn)地址。
public ReturnJson weChatPay_H5(int cashNum, String orderNo,String redirect_url) throws Exception {
    //1.私鑰為String字符串的方式來加載
    //PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(new ByteArrayInputStream(WX_KEY.getBytes("utf-8")));
    //2.通過加載文件的方式來讀取私鑰
    String path = this.getClass().getClassLoader().getResources("./apiclient_key.pem").nextElement().getPath();
    //加載商戶私鑰(私鑰存儲(chǔ)在文件)
    PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(new FileInputStream(path));
    //加載平臺(tái)證書(mchId:商戶號(hào),mchSerialNo:商戶證書序列號(hào),apiV3Key:V3密鑰)
    AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(new WechatPay2Credentials(WX_MCH_ID, new PrivateKeySigner(WX_Serial_Number, merchantPrivateKey)),V3_key.getBytes("utf-8"));
    //初始化httpClient
    CloseableHttpClient builder = WechatPayHttpClientBuilder.create().withMerchant(WX_MCH_ID, WX_Serial_Number, merchantPrivateKey).withValidator(new WechatPay2Validator(verifier)).build();
    //請求的微信支付地址
    HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/pay/transactions/h5");
    //發(fā)送給微信的部分json參數(shù)
    //amount 為訂單的金額信息
    //total  為訂單總金額(單位:分)
    //currency 貨幣類型
    //scene_info 支付的場景相關(guān)信息
    //payer_client_ip  用戶的終端ip,支持IPV4和IPV6
    //h5_info  h5支付的場景信息
    //type  支付場景類型
    //mch_id	商戶號(hào)
    //description  商品描述
    //notify_url  回調(diào)通知地址(此地址是用戶支付成功后,微信方要發(fā)送支付成功的通知)
    //out_trade_no  商戶訂單號(hào)
    //goods_tag		商品標(biāo)簽
    //appid			appid
    String reqData = "{"
            + "\"amount\": {"
            + "\"total\": "+cashNum+","
            + "\"currency\": \"CNY\""
            + "},"
            + "\"scene_info\": {"
            + "\"payer_client_ip\":\"14.23.150.200\","
            + "\"h5_info\": {"
            + "\"type\": \"Wap\"" + "}},"
            + "\"mchid\": \""+WX_MCH_ID+"\","
            + "\"description\": \"優(yōu)選商城\","
            + "\"notify_url\": \""+AliPay_H5_NotifyUrl+"\","
            + "\"out_trade_no\": \""+orderNo+"\","
            + "\"goods_tag\": \"WXG\","
            + "\"appid\": \""+WX_APP_ID+"\"" + "}";
    StringEntity entity = new StringEntity(reqData,"utf-8");
    entity.setContentType("application/json");
    httpPost.setEntity(entity);
    httpPost.setHeader("Accept","application/json");
    CloseableHttpResponse response = builder.execute(httpPost);
    try {
        int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode == 200) {
            String url = URLEncoder.encode(redirect_url, "GBK");
            JSONObject js = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));
            String  aa = js.get("h5_url").toString();
            js.put("h5_url",aa+"&redirect_url="+url);
            String payUrl = js.toJSONString();
            return ReturnUtils.returnVal(CommonConstants.appCode.SUCCESS.get(),payUrl);
        } else if (statusCode == 204) {
            return ReturnUtils.returnVal(CommonConstants.appCode.SUCCESS.get(), EntityUtils.toString(response.getEntity()));
        } else {
            return ReturnUtils.returnVal(CommonConstants.appCode.DATAERROR.get(), EntityUtils.toString(response.getEntity()));
        }
    } finally {
        response.close();
    }
}
2.3 編寫H5支付回調(diào)接口
	//用戶支付成功后,通知的回調(diào)地址
	//進(jìn)行兩步操作 1.接收微信發(fā)送的參數(shù)后,驗(yàn)簽并解析。
	//2.根據(jù)微信給到的參數(shù),出發(fā)后續(xù)的操作,比如修改訂單狀態(tài)、發(fā)送站內(nèi)信等等
	//此接口微信可能會(huì)出現(xiàn)多次調(diào)用,請注意處理
	@ResponseBody
    @RequestMapping(value = "/wechatRefundNotify",produces = {"application/json;charset=utf-8"})
    public ResultEntity wechatRefundNotify(@RequestBody WeChatPayEntity weChatPayEntity) {
        AesUtil aesUtils = new AesUtil(this.V3_key.getBytes());
        try {
            String string = aesUtils.decryptToString(weChatPayEntity.getResource().getAssociated_data().getBytes(), weChatPayEntity.getResource().getNonce().getBytes(), weChatPayEntity.getResource().getCiphertext());
            JSONObject jsonObject = JSONObject.parseObject(string);
            //獲取訂單號(hào)
            String out_trade_no = jsonObject.getString("out_trade_no");
            //獲取支付的訂單狀態(tài), SUCCESS(支付成功)
            String trade_state = jsonObject.getString("trade_state");
            //獲取支付狀態(tài)  SUCCESS
            if(refund_status.equals("SUCCESS")){
                //進(jìn)行支付成功后的相關(guān)操作.....
                //然后返回給微信指定的參數(shù),否則微信可能會(huì)再次通知
                return new ResultEntity("SUCCESS", "成功");
            }else {
                //這里是支付狀態(tài)錯(cuò)誤.....
                //進(jìn)行相關(guān)的操作
                return new ResultEntity("FAIL", "失敗");
            }
        } catch (Exception e) {
            //錯(cuò)誤處理
        }
        return new ResultEntity("FAIL", "失敗");
    }
2.4 微信回調(diào)接收的相關(guān)參數(shù)實(shí)體類
	//WeChatPayEntity 類
	public class WeChatPayEntity {
	//通知?jiǎng)?chuàng)建時(shí)間
    private String create_time;
    //回調(diào)摘要
    private String summary;
    //通知數(shù)據(jù)類型
    private String resiyrce_type;
    //通知的資源數(shù)據(jù)(支付訂單的相關(guān)信息)
	private WeChatRequestEntities resource = new WeChatRequestEntities();
	
	}
//WeChatRequestEntities 類
public class WeChatRequestEntities {
	//微信返回交易狀態(tài)
	//SUCCESS:支付成功
	//REFUND:轉(zhuǎn)入退款
	//NOTPAY:未支付
	//CLOSED:已關(guān)閉
	//REVOKED:已撤銷(付款碼支付)
	//USERPAYING:用戶支付中(付款碼支付)
	//PAYERROR:支付失敗(其他原因,如銀行返回失敗)
    private String trade_state;
	//商戶訂單號(hào)(我們對接H5支付接口時(shí)候傳入的 訂單號(hào))
    private String out_trade_no;
	//附加數(shù)據(jù)
    private String associated_data;
	//隨機(jī)串
    private String nonce;
	//數(shù)據(jù)密文
    private String ciphertext;
}

到了這里,關(guān)于微信H5支付及通知回調(diào)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微信的 h5 支付和 jsapi 支付

    微信的 h5 支付和 jsapi 支付

    申請地址: https://pay.weixin.qq.com/ 如果你還沒有微信商戶號(hào),請點(diǎn)擊上面的鏈接進(jìn)行申請,如果已經(jīng)有了,可以跳過這一步 首先點(diǎn)擊 賬戶中心 ? API安全 ? 申請API證書 申請?jiān)敿?xì)步驟: https://kf.qq.com/faq/161222NneAJf161222U7fARv.html 首先點(diǎn)擊 賬戶中心 ? API安全 ? 設(shè)置APIv3密鑰 ?

    2024年02月13日
    瀏覽(17)
  • 前端H5微信支付寶支付實(shí)現(xiàn)

    前端H5微信支付寶支付實(shí)現(xiàn)

    支付寶的 首先是一個(gè)支付類型選擇頁面,在選擇支付寶支付后,跳轉(zhuǎn)到一個(gè)空白頁,用于支付寶支付的中轉(zhuǎn)頁面。 在點(diǎn)擊立即支付之后,直接跳轉(zhuǎn)至自行設(shè)置好的空白頁就好,并把你生成訂單所需要的數(shù)據(jù)一并帶過去。 接下來就是重點(diǎn)操作了(其實(shí)非常簡單),在跳轉(zhuǎn)這個(gè)

    2024年02月03日
    瀏覽(23)
  • vue實(shí)現(xiàn)H5支付(微信,支付寶)

    1.判斷瀏覽器是微信還是支付寶或其他瀏覽器 2.微信瀏覽器調(diào)用微信支付的方法(調(diào)用后臺(tái)接口創(chuàng)建訂單,需要微信用戶唯一標(biāo)識(shí)openid;接口返回微信支付所需的支付參數(shù)) 3.支付寶瀏覽器支付方法

    2024年02月16日
    瀏覽(24)
  • 〔支付接入〕微信的 h5 支付和 jsapi 支付

    〔支付接入〕微信的 h5 支付和 jsapi 支付

    申請地址: https://pay.weixin.qq.com/ 如果你還沒有微信商戶號(hào),請點(diǎn)擊上面的鏈接進(jìn)行申請,如果已經(jīng)有了,可以跳過這一步 首先點(diǎn)擊 賬戶中心 ? API安全 ? 申請API證書 申請?jiān)敿?xì)步驟: https://kf.qq.com/faq/161222NneAJf161222U7fARv.html 首先點(diǎn)擊 賬戶中心 ? API安全 ? 設(shè)置APIv3密鑰 ?

    2024年02月13日
    瀏覽(54)
  • 微信仿H5支付

    微信仿H5支付

    仿H5支付是指一種模擬原生H5支付流程的非官方支付方式。這種支付方式通常是由第三方支付服務(wù)提供商開發(fā)和維護(hù)的,目的是為了繞過官方支付渠道的限制,如費(fèi)率、審核等問題。然而,由于仿H5支付并非官方授權(quán)和認(rèn)可的支付方式,其安全性和合規(guī)性可能存在隱患。 使用仿

    2024年02月10日
    瀏覽(23)
  • 微信 h5 支付開發(fā)

    微信 h5 支付開發(fā)

    申請地址: https://pay.weixin.qq.com/ 如果你還沒有微信商戶號(hào),請點(diǎn)擊上面的鏈接進(jìn)行申請,如果已經(jīng)有了,可以跳過這一步 首先點(diǎn)擊 賬戶中心 ? API安全 ? 申請API證書 申請?jiān)敿?xì)步驟: https://kf.qq.com/faq/161222NneAJf161222U7fARv.html 首先點(diǎn)擊 賬戶中心 ? API安全 ? 設(shè)置APIv3密鑰 ?

    2024年02月14日
    瀏覽(17)
  • 微信H5頁面實(shí)現(xiàn)微信小程序支付

    微信H5頁面實(shí)現(xiàn)微信小程序支付

    背景: 在微信H5頁面已經(jīng)實(shí)現(xiàn)了微信JSAPI的網(wǎng)頁支付,老板要求把整個(gè)業(yè)務(wù)線快速轉(zhuǎn)移到微信小程序中,作為懶惰的程序員來說,直接把頁面嵌套到小程序不就行了。說干就干,在小程序中設(shè)置好基本信息后,一預(yù)覽居然成功了,一切看來是那么順利,可到了系統(tǒng)的支付環(huán)節(jié)

    2024年02月14日
    瀏覽(23)
  • 前端實(shí)現(xiàn)微信支付(H5,微信小程序)

    前端實(shí)現(xiàn)微信支付(H5,微信小程序)

    通常一些電商項(xiàng)目使用到微信支付操作,所以簡單地介紹一下微信支付的具體流程。 微信支付是微信內(nèi)置微信瀏覽器(其他瀏覽器不支持)或者微信小程序的支付接口,主要負(fù)責(zé)用戶對商家執(zhí)行支付操作的流程。 例如常見的電商在下單環(huán)節(jié),就需要通過使用微信支付接口,

    2024年02月08日
    瀏覽(25)
  • uniapp前端支付篇(微信、抖音、快手、h5)四個(gè)平臺(tái)支付

    uniapp前端支付篇(微信、抖音、快手、h5)四個(gè)平臺(tái)支付

    微信、快手、h5支付步驟大致相同,只有抖音是有自己的支付組件 項(xiàng)目同時(shí)支持多個(gè)(微信、快手、h5)平臺(tái)支付,后端那邊代碼可以封裝的 點(diǎn)擊支付 創(chuàng)建訂單 生成密鑰和支付所需要的參數(shù) 支付成功 查詢訂單狀態(tài) 1.支付按鈕 2.支付事件 1.支付按鈕 2.支付事件 抖音有自己的

    2024年02月02日
    瀏覽(39)
  • app內(nèi)嵌h5支付功能,跳轉(zhuǎn)支付寶&微信,vue組件

    app內(nèi)前h5涉及到支付的功能,ios非實(shí)物商品實(shí)付需要使用ios原生支付方式,實(shí)物商品則可以三方支付,主要的實(shí)現(xiàn)思路為后端返回跳轉(zhuǎn)支付寶或微信的支付scheme鏈接,前端進(jìn)行跳轉(zhuǎn)支付,同時(shí)需要實(shí)時(shí)查詢用戶的支付狀態(tài)。 整個(gè)過程中復(fù)雜的部分在于查詢用戶支付狀態(tài)的體驗(yàn)

    2024年02月06日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包