웹 프론트엔드 JS 튜토리얼 nodejs는 WeChat 코드 스캐닝 결제 기능을 구현합니다.

nodejs는 WeChat 코드 스캐닝 결제 기능을 구현합니다.

Feb 22, 2018 am 09:00 AM
javascript nodejs 기능

준비

WeChat 공개 계정-appid

WeChat 판매자 계정-mch_id

키 값 (서명 알고리즘에 필요하며 실제로는 32비트 비밀번호이며 md5를 사용하여 생성할 수 있습니다) (키 설정 경로 : 위챗 가맹점 플랫폼 (pay.weixin.qq.com)-->계정 설정-->API 보안-->주요 설정)

QR코드를 스캔하여 결제 - 통합주문

다음은 WeChat 모드 둘째, 상대적으로 간단하기 때문입니다


  let MD5 = require('md5'),
    xml2js = require('xml2js'),
    url = "https://api.mch.weixin.qq.com/pay/unifiedorder",// 下单请求地址
    appid = '公众号id',
    mch_id = '微信商户号';
    notify_url = '回调地址',
    out_trade_no = '自己设置的订单号',// 微信会有自己订单号、我们自己的系统需要设置自己的订单号
    total_fee = '订单金额',// 注意,单位为分
    body = '商品简单描述', 
    trade_type = 'NATIVE',// 交易类型,JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付
    nonce_str = moment().format('YYYYMMDDHHmmssSSS'),// 随机字符串32位以下
    stringA = `appid=${公众号id}&body=${body}&mch_id=${微信商户号}&nonce_str=${nonce_str}&notify_url=${
    notify_url}&out_trade_no=${out_trade_no}&spbill_create_ip=${ctx.request.ip}&total_fee=${total_fee}&trade_type=${trade_type}`,
    stringSignTemp = stringA + "&key=xxxxxxxxxxxxxxxxx", //注:key为商户平台设置的密钥key
    sign = MD5(stringSignTemp).toUpperCase(); //注:MD5签名方式
로그인 후 복사

위는 우리에게 필요한 몇 가지 매개변수입니다

서명 생성 알고리즘은 WeChat 공식을 참조하세요: https://pay.weixin.qq.com/wiki/doc /api/native.php ?chapter=4_3

spbill_create_ip는 터미널 IP 주소입니다

모든 매개 변수는 아래 xml에 스플라이싱되어 있습니다


  const formData = "<xml>";
    formData += "<appid>" + appid + "</appid>"; //appid
    formData += "<body>" + body + "</body>"; //商品或支付单简要描述
    formData += "<mch_id>" + mch_id + "</mch_id>"; //商户号
    formData += "<nonce_str>" + nonce_str + "</nonce_str>"; //随机字符串,不长于32位
    formData += "<notify_url>" + notify_url + "</notify_url>"; //支付成功后微信服务器通过POST请求通知这个地址
    formData += "<out_trade_no>" + out_trade_no + "</out_trade_no>"; //订单号
    formData += "<total_fee>" + total_fee + "</total_fee>"; //金额
    formData += "<spbill_create_ip>" + ctx.request.ip + "</spbill_create_ip>"; //ip
    formData += "<trade_type>NATIVE</trade_type>"; //NATIVE会返回code_url ,JSAPI不会返回
    formData += "<sign>" + sign + "</sign>";
    formData += "</xml>";
  // 这里使用了egg里面请求的方式
  const resultData = yield ctx.curl(url, {
      method: &#39;POST&#39;,
      content: formData,
      headers: {
        &#39;content-type&#39;: &#39;text/html&#39;,
      },
    });

  // xml转json格式
  xml2js.parseString(resultData.data, function (err, json) {
    if (err) {
      new Error("解析xml报错")
    } else {
      var result = formMessage(json.xml); // 转换成正常的json 数据
      console.log(result) //打印出返回的结果
    }
  })
  var formMessage = function (result) {
    var message = {};
    if (typeof result === &#39;object&#39;) {
      var keys = Object.keys(result);
      for (var i = 0; i < keys.length; i++) {
        var item = result[keys[i]];
        var key = keys[i];
        if (!(item instanceof Array) || item.length === 0) {
          continue;
        }
        if (item.length === 1) {
          var val = item[0];
          if (typeof val === &#39;object&#39;) {
            message[key] = formMessage(val);
          } else {
            message[key] = (val || &#39;&#39;).trim();
          }
        } else {
          message[key] = [];
          for (var j = 0, k = item.length; j < k; j++) {
            message[key].push(formMessage(itemp[j]));
          }
        }
      }
    }
    return message;
  }
로그인 후 복사

위에서 egg 요청 방법을 사용하며, 네이티브 노드는 request


var request = require(&#39;request&#39;);
  request({
    url: url,
    method: "POST",
    body: formData
  }, function(error, response, body) {
    if (!error && response.statusCode == 200) {
    }
  });
로그인 후 복사

요청이 성공하면 결국 xml을 반환하고 이를 json 형식으로 구문 분석합니다. 여기에는 code_url 및 out_trade_no가 포함되며 이 두 가지를 프런트 엔드에 반환해야 합니다. QR 코드를 생성하여 사용자에게 표시하고 코드를 스캔하여 결제를 완료합니다

결제 성공 여부를 모니터링

위 작업이 완료된 후 사용자가 결제를 완료했는지 여부를 알아야 하며, 사용자는 이 페이지에 머물게 되며, 사용자가 결제를 완료한 후 결제가 성공했음을 사용자에게 알려야 하기 때문입니다.

먼저 사용자가 결제를 시작하면 사용자가 코드를 스캔하여 결제할 수 있도록 QR 코드를 생성합니다. 또한 타이머를 설정하고 한 번에 요청을 보내는 것입니다. 이때 우리 노드는 주문 쿼리를 위한 인터페이스를 작성해야 합니다. 이전에는 우리 시스템 내부의 주문 번호인 out_trade_no를 얻었고, 그 후 이를 받았습니다. 백엔드는 WeChat 쿼리 인터페이스 주소 https://api.mch.weixin.qq.com/pay/orderquery를 요청합니다. 인터페이스 주소가 WeChat에서 반환된 xml과 다르다는 점을 제외하면 프로세스는 위와 동일합니다. 반환된 필드는 SUCCESS 및 NOTPAY 상태를 가지며 지불 여부를 판단할 수 있습니다. 성공하면 사용자에게 성공적으로 지불하라는 메시지가 표시되고 타이머가 종료됩니다.

콜백 주소

이 부분은 실제로 대부분의 작업이 완료될 수 있지만 특별한 상황이 있습니다. 예를 들어 사용자의 컴퓨터가 연결이 끊어져 요청을 보낼 수 없지만 결제가 완료됩니다. 이로 인해 사용자 결제 정보가 기록되지 않습니다. 이때 콜백 주소가 매우 중요합니다

콜백 주소 설정

WeChat 판매자 센터->제품 센터->개발 구성->QR 코드 스캔하여 결제

이후 해야 할 일 즉, 백엔드에서 post를 사용하는 것입니다. WeChat에서 보낸 비동기 콜백 정보를 XML 형식으로 수신합니다. 여기서 XML 수신이 지원되지 않으면 빈 데이터가 나타날 수 있습니다.

여기서 저장하는 동안에도 주의해야 합니다. 사용자의 결제 정보를 먼저 확인해야 합니다. 반복 작업을 피하기 위해 여러 기록이 삽입될 수 있습니다. 요약

위챗 스캔 코드 결제가 처음인 경우에는 다음과 같습니다. 주의해야 할 사항 목록

서명 알고리즘은 올바르게 작성되어야 합니다. 그렇지 않으면 올바르게 연결되어야 합니다.
  1. WeChat은 데이터를 xml 형식으로 반환해야 합니다. 플러그인을 통해 json으로 변환하여 데이터를 얻기 편리합니다
  2. 반환된 code_url을 사용하여 프런트 엔드에 대한 QR 코드를 생성한 다음 타이머를 설정하여 여부를 확인해야 합니다. 주문이 결제되었으며 마침내 사용자에게 결과가 통보됩니다
  3. 콜백 주소는 매우 중요합니다. 우리 백엔드는 WeChat 정보에서 반환된 콜백을 수신하기 위해 게시해야 하며, 그런 다음 정보를 저장해야 합니다. 사용자의 결제 정보를 확인하려면 반복적인 추가를 피하기 위해 주문이 저장되었는지 알아야 합니다. 또한 반환된 XML 데이터를 수신하려면 백엔드에서 이를 보장해야 합니다. 일반적인 방법으로는 수신할 수 없으며 추가 설정이 필요합니다.
  4. 관련 권장 사항:

PC에서 WeChat 스캔 결제 성공 후 자동으로 PHP 버전 코드 공유로 이동

WeChat 스캔 코드 결제 모드

php 샘플 코드 공유를 통해 WeChat 스캔 코드 결제 구현

위 내용은 nodejs는 WeChat 코드 스캐닝 결제 기능을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

nodejs는 백엔드 프레임워크인가요? nodejs는 백엔드 프레임워크인가요? Apr 21, 2024 am 05:09 AM

Node.js는 고성능, 확장성, 크로스 플랫폼 지원, 풍부한 생태계, 개발 용이성 등의 기능을 제공하므로 백엔드 프레임워크로 사용할 수 있습니다.

nodejs를 mysql 데이터베이스에 연결하는 방법 nodejs를 mysql 데이터베이스에 연결하는 방법 Apr 21, 2024 am 06:13 AM

MySQL 데이터베이스에 연결하려면 다음 단계를 따라야 합니다. mysql2 드라이버를 설치합니다. mysql2.createConnection()을 사용하여 호스트 주소, 포트, 사용자 이름, 비밀번호 및 데이터베이스 이름이 포함된 연결 개체를 만듭니다. 쿼리를 수행하려면 Connection.query()를 사용하세요. 마지막으로 Connection.end()를 사용하여 연결을 종료합니다.

nodejs의 전역 변수는 무엇입니까 nodejs의 전역 변수는 무엇입니까 Apr 21, 2024 am 04:54 AM

Node.js에는 다음과 같은 전역 변수가 존재합니다. 전역 개체: 전역 핵심 모듈: 프로세스, 콘솔, 필수 런타임 환경 변수: __dirname, __filename, __line, __column 상수: undefine, null, NaN, Infinity, -Infinity

nodejs 설치 디렉토리에 있는 npm과 npm.cmd 파일의 차이점은 무엇입니까? nodejs 설치 디렉토리에 있는 npm과 npm.cmd 파일의 차이점은 무엇입니까? Apr 21, 2024 am 05:18 AM

Node.js 설치 디렉터리에는 npm과 npm.cmd라는 두 가지 npm 관련 파일이 있습니다. 차이점은 다음과 같습니다. 확장자가 다릅니다. npm은 실행 파일이고 npm.cmd는 명령 창 바로 가기입니다. Windows 사용자: npm.cmd는 명령 프롬프트에서 사용할 수 있으며, npm은 명령줄에서만 실행할 수 있습니다. 호환성: npm.cmd는 Windows 시스템에만 해당되며 npm은 크로스 플랫폼에서 사용할 수 있습니다. 사용 권장사항: Windows 사용자는 npm.cmd를 사용하고, 기타 운영 체제는 npm을 사용합니다.

nodejs와 java 사이에 큰 차이가 있나요? nodejs와 java 사이에 큰 차이가 있나요? Apr 21, 2024 am 06:12 AM

Node.js와 Java의 주요 차이점은 디자인과 기능입니다. 이벤트 중심 대 스레드 중심: Node.js는 이벤트 중심이고 Java는 스레드 중심입니다. 단일 스레드 대 다중 스레드: Node.js는 단일 스레드 이벤트 루프를 사용하고 Java는 다중 스레드 아키텍처를 사용합니다. 런타임 환경: Node.js는 V8 JavaScript 엔진에서 실행되는 반면 Java는 JVM에서 실행됩니다. 구문: Node.js는 JavaScript 구문을 사용하고 Java는 Java 구문을 사용합니다. 목적: Node.js는 I/O 집약적인 작업에 적합한 반면, Java는 대규모 엔터프라이즈 애플리케이션에 적합합니다.

nodejs는 백엔드 개발 언어인가요? nodejs는 백엔드 개발 언어인가요? Apr 21, 2024 am 05:09 AM

예, Node.js는 백엔드 개발 언어입니다. 서버 측 비즈니스 로직 처리, 데이터베이스 연결 관리, API 제공 등 백엔드 개발에 사용됩니다.

nodejs와 java 중 어느 것을 선택해야 합니까? nodejs와 java 중 어느 것을 선택해야 합니까? Apr 21, 2024 am 04:40 AM

Node.js와 Java는 각각 웹 개발에 장단점이 있으며 선택은 프로젝트 요구 사항에 따라 다릅니다. Node.js는 실시간 애플리케이션, 신속한 개발 및 마이크로서비스 아키텍처에 탁월한 반면, Java는 엔터프라이즈급 지원, 성능 및 보안에 탁월합니다.

nodejs 프로젝트를 서버에 배포하는 방법 nodejs 프로젝트를 서버에 배포하는 방법 Apr 21, 2024 am 04:40 AM

Node.js 프로젝트의 서버 배포 단계: 배포 환경 준비: 서버 액세스 권한 획득, Node.js 설치, Git 저장소 설정. 애플리케이션 빌드: npm run build를 사용하여 배포 가능한 코드와 종속성을 생성합니다. Git 또는 파일 전송 프로토콜을 통해 서버에 코드를 업로드합니다. 종속성 설치: SSH를 서버에 연결하고 npm install을 사용하여 애플리케이션 종속성을 설치합니다. 애플리케이션 시작: node index.js와 같은 명령을 사용하여 애플리케이션을 시작하거나 pm2와 같은 프로세스 관리자를 사용합니다. 역방향 프록시 구성(선택 사항): Nginx 또는 Apache와 같은 역방향 프록시를 사용하여 트래픽을 애플리케이션으로 라우팅합니다.

See all articles