日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

沙箱環境 (Beta) 是協助開發者進行接口功能開發及主要功能聯調的輔助環境,模擬了開放平臺部分產品的主要功能和主要邏輯。可用于在產品上線前了解環境、組合和調試各種接口。

沙箱環境配置

打開 支付寶開發者中心 并登錄,點擊 => 進入我的控制臺(也可能登錄之后自動進入),

使用 Node.js 打通支付寶支付(沙箱環境)

 

在開發者中心中點擊開發服務下的研發服務,就進入沙箱環境頁面了,

使用 Node.js 打通支付寶支付(沙箱環境)

 

在沙箱應用可以看到基本配置。

使用 Node.js 打通支付寶支付(沙箱環境)

 

密鑰配置

點擊 RSA2(SHA256)密鑰 設置,

使用 Node.js 打通支付寶支付(沙箱環境)

 

點擊 支付寶密鑰生成器,下載對應版本的工具,下載完成后將工具安裝在不包含空格的目錄中,

使用 Node.js 打通支付寶支付(沙箱環境)

 

然后點打開,點擊生成密鑰,即可生成商戶應用私鑰與商戶應用公鑰。然后點擊復制公鑰。

使用 Node.js 打通支付寶支付(沙箱環境)

 

回到沙箱界面,選擇公鑰,并把剛剛復制的公鑰粘貼進去;

使用 Node.js 打通支付寶支付(沙箱環境)

 

然后就可以得到支付寶公鑰了,代碼中會用到。

使用 Node.js 打通支付寶支付(沙箱環境)

 

node API 配置

首先安裝 Alipay SDK:

npm install alipay-sdk -S
// sdk 配置語法
alipaySdk.exec(method, params, options);
  • method:字符串類型,調用的 Api,比如 alipay.trade.page.pay ;
  • params:可選參數,對象結構,Api 的請求參數;
  • options:包含
    • validateSign:布爾值,是否對返回值驗簽,需要依賴支付寶公鑰;
    • formData:對象結構,文件上傳類接口的請求參數;
    • log:對象結構,存在時會調用 info、error 方法寫日志。

由于每次調用 AlipaySdk 的 API 都是同一個對象,所以該對象只需要實例化一次:

// alipay.js 這里單獨存放一個文件中,需要時引入即可
const AlipaySdk = require('alipay-sdk').default; // 引入 SDK
const alipaySdk =  new  AlipaySdk({
  AppId: 'appId', // 開放平臺上創建應用時生成的 appId
  signType: 'RSA2', // 簽名算法,默認 RSA2
  gateway: 'https://openapi.alipaydev.com/gateway.do', // 支付寶網關地址 ,沙箱環境下使用時需要修改
  alipayPublicKey: 'public_key', // 支付寶公鑰,需要對結果驗簽時候必填
  privateKey: 'private_key', // 應用私鑰字符串
});module.exports = alipaySdk;

要完成支付,需要以下幾個步驟,

  • 服務器端需要調用支付 API alipay.trade.page.pay 來獲取支付頁面的地址;
  • 將得到的支付地址發給客戶端,由客戶端進行頁面跳轉;

先來看看服務端接口的實現:

var express = require('express');
var router = express.Router();const alipaySdk = require('../utils/alipay');
const AlipayFormData = require('alipay-sdk/lib/form').default; // alipay.trade.page.pay 返回的內容為 Form 表單
router.post('/pcpay', (req, res) => {
    (async () => {        // 調用 setMethod 并傳入 get,會返回可以跳轉到支付頁面的 url
        const formData = new AlipayFormData();
        formData.setMethod('get');
        // 通過 addField 增加參數
        // 在用戶支付完成之后,支付寶服務器會根據傳入的 notify_url,以 POST 請求的形式將支付結果作為參數通知到商戶系統。
        formData.addField('notifyUrl', 'http://www.com/notify'); // 支付成功回調地址,必須為可以直接訪問的地址,不能帶參數
        formData.addField('bizContent', {
            outTradeNo: req.body.outTradeNo, // 商戶訂單號,64個字符以內、可包含字母、數字、下劃線,且不能重復
            productCode: 'FAST_INSTANT_TRADE_PAY', // 銷售產品碼,與支付寶簽約的產品碼名稱,僅支持FAST_INSTANT_TRADE_PAY
            totalAmount: '0.01', // 訂單總金額,單位為元,精確到小數點后兩位
            subject: '商品', // 訂單標題
            body: '商品詳情', // 訂單描述
        });        // 如果需要支付后跳轉到商戶界面,可以增加屬性"returnUrl"
        const result = await alipaySdk.exec(
            'alipay.trade.page.pay', // 統一收單下單并支付頁面接口
            {}, // api 請求的參數(包含“公共請求參數”和“業務參數”)
            { formData: formData },        );        // result 為可以跳轉到支付鏈接的 url
        res.json({            url: result        });    })();});

然后就是前端頁面,這個比較簡單,就是點擊支付按鈕,向服務器發起請求,拿到返回的支付頁面地址后進行跳轉:

$.ajax({
    method: 'POST',
    url: '/alipay/pcpay',
    data: {        outTradeNo // 商戶訂單號,必須保證唯一,生成方法有很多,可以去看我的代碼    }}).done(function(res) {
    window.open(res.url, '_blank');
}).fail(function(err) {
    console.log(err);
});

如果上訴沒有問題,我們應該能看到這樣的頁面:

使用 Node.js 打通支付寶支付(沙箱環境)

 

如果是使用沙箱環境,必須下載沙箱錢包來完成支付,下載地方如下所示:

使用 Node.js 打通支付寶支付(沙箱環境)

 

下載完成后,使用沙箱提供的賬號登陸即可,隨便充值,隨便消費,其實沙箱錢包里就是一個數字而已。

使用 Node.js 打通支付寶支付(沙箱環境)

 

然后這里補充一個點,就是前端如何判斷用戶是否已經支付。我們都知道前端的手段是不被信任的,所以不能依賴前端來判斷,唯一可靠的方法是使用支付寶 API 中的 alipay.trade.query 來查詢是否已經完成支付。

可以通過前端發送訂單號到服務器進行查詢,服務器向支付寶服務器查詢該訂單號支付的相關信息,通過交易狀態來確定是否已經完成支付,具體服務器配置如下:

const axIOS = require('axios');
const alipaySdk = require('../utils/alipay');
const AlipayFormData = require('alipay-sdk/lib/form').default;
router.get('/query', function(req, res) {
    (async function() {
        const { outTradeNo } = req.query;        const formData = new AlipayFormData();        formData.setMethod('get');
        formData.addField('bizContent', {
          outTradeNo        });        // 通過該接口主動查詢訂單狀態        const result = await alipaySdk.exec(          'alipay.trade.query', 
          {},           { formData: formData },        );        axios({          method: 'GET',
          url: result        })        .then(data => {
          let r = data.data.alipay_trade_query_response;          if(r.code === '10000') { // 接口調用成功
            switch(r.trade_status) {              case 'WAIT_BUYER_PAY':
                res.send('交易創建,等待買家付款');
                break;
              case 'TRADE_CLOSED':
                res.send('未付款交易超時關閉,或支付完成后全額退款');
                break;
              case 'TRADE_SUCCESS':
                res.send('交易支付成功');
                break;
              case 'TRADE_FINISHED':
                res.send('交易結束,不可退款');
                break;
            }          } else if(r.code === '40004') {
            res.send('交易不存在');
          }        })        .catch(err => {          res.json({            msg: '查詢失敗',
            err          });        });    })();});

【本文轉載自我的微信公眾號-飛舟技術社區】

【喜歡我的文章歡迎 轉發 點贊 與 關注,我會經常與大家分享前端的知識點的】

分享到:
標簽:Node js
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定