返回介绍

扫码支付(主扫)

发布于 2024-04-20 23:54:35 字数 15510 浏览 0 评论 0 收藏 0

Native 扫码支付(主扫) API


扫码请求步骤:

  1. 构建请求参数(数据请求为原始表单格式,非JSON格式)
  2. POST 参数到请求地址
  3. 根据返回内容展示二维码
  4. 用户支付成功后接收异步通知

请求地址:https://payjs.cn/api/native

请求参数(必选参数):

字段名称字段类型必填参数说明
mchidstring(16)Y商户号
total_feeint(16)Y金额。单位:分
out_trade_nostring(32)Y用户端自主生成的订单号
signstring(32)Y数据签名 详见签名算法
bodystring(64)N订单标题
attachstring(127)N用户自定义数据,在notify的时候会原样返回
notify_urlstring(255)N接收微信支付异步通知的回调地址。必须为可直接访问的URL,不能带参数、session验证、csrf验证。留空则不通知
typestring(16)N支付宝交易传值:alipay ,微信支付无需此字段
no_creditstring(1)N公测参数 禁止使用信用卡支付请传值:1
time_expirestring(14)N公测参数 订单有效期。格式:20200826080808

请求返回:

字段名称字段类型必填参数说明
return_codeintY1:请求成功,0:请求失败
return_msgstring(16)Y返回消息
payjs_order_idstring(16)YPAYJS 平台订单号
out_trade_nostring(16)Y用户生成的订单号原样返回
total_feeint(16)Y金额。单位:分
code_urlstring(64)Y二维码内容(有效期2小时)
qrcodestring(128)Y二维码图片地址
signstring(64)Y数据签名 详见签名算法

扫码支付演示代码:

php python go node java csharp ruby

// 引入 payjs.class.php
// 项目地址:https://github.com/payjs-cn/phpsdk

include("payjs.class.php");

$mchid = '123456';
$key = 'xxxxxx';

$data = [
    "mchid" => $mchid,
    "total_fee" => 1,
    "out_trade_no" => '123123123',
];

$payjs = new Payjs($mchid, $key);
$result = $payjs->native($data);

print_r($result);

php

// 引入 payjs.class.php
// 项目地址:https://github.com/payjs-cn/phpsdk

include("payjs.class.php");

$mchid = '123456';
$key = 'xxxxxx';

$data = [
    "mchid" => $mchid,
    "total_fee" => 1,
    "out_trade_no" => '123123123',
];

$payjs = new Payjs($mchid, $key);
$result = $payjs->native($data);

print_r($result);

python

# !/usr/bin/env Python3
# -*- coding: utf-8 -*-
import requests
import time
import hashlib
from urllib.parse import urlencode,unquote
'''
扫码支付(主扫)
'''
key = ''         # 填写通信密钥
mchid = ''       # 特写商户号

time = str(int(time.time()))
order = {
    'body'         : 'test',  # 订单标题
    'out_trade_no' : time,    # 订单号
    'total_fee'    : 120,     # 金额,单位:分
    'mchid' : mchid
}

# 构造签名函数
def sign(attributes):
    attributes_new = {k: attributes[k] for k in sorted(attributes.keys())}
    return hashlib.md5((unquote(urlencode(attributes_new))+'&key='+key)
        .encode(encoding='utf-8')).hexdigest().upper()

order['sign'] = sign(order)
request_url = "https://payjs.cn/api/native"
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=order,headers=headers)
if response:
    print(response.json())

go

package main

import (
    "fmt"
    "strings"
    "net/http"
    "net/url"
    "io/ioutil"
)

func main(){
    data := url.Values{"mchid":{"XXX"}, "total_fee":{"1"}, "out_trade_no":{"123123"}, "sign":{"XXX"}}
    data2 := strings.NewReader(data.Encode())
    resp, err := http.Post("https://payjs.cn/api/native", "application/x-www-form-urlencoded", data2)
    if err != nil {
        fmt.Println(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        // handle error
    }

    fmt.Println(string(body))
}

node

// 项目地址:https://github.com/payjs-cn/demo-nodejs
// 首先引入文件,并在config.js中配置商户号和通信密钥
var cfg = require("./config.js"); 
var pay = require("./pay.js");

var params = {
  'mchid': cfg.payjsmchid,     //商户号
  'total_fee': 1,              //金额。单位:分
  'out_trade_no': '123456789', //用户端自主生成的订单号
  'body': '订单标题',           //订单标题
  'attach': '自定义数据',       //用户自定义数据,在notify的时候会原样返回
  'notify_url': ''             //接收微信支付异步通知的回调地址。必须为可直接访问的URL,不能带参数、session验证、csrf验证。留空则不通知
};

pay.native(params,function (msg) {
    console.log(msg);
    /**TODO 这里处理业务逻辑 */
});

java

// 完整代码:https://github.com/payjs-cn/demo-java
public Object Native() {
    Map<String,String> payData = new HashMap<>();
    payData.put("mchid", PayjsConfig.mchid);
    payData.put("total_fee", "100");
    payData.put("out_trade_no", "83432749"); // 订单号 随便输的,自己生成一下就好了
    payData.put("body","订单标题");
    payData.put("notify_url", "https://你的域名/api/pay/notify");

    // 进行sign签名
    payData.put("sign", sign(payData, PayjsConfig.key));

    // 请求payjs获取二维码
    String result = HttpsUtils.sendPost(PayjsConfig.nativeUrl, JSON.toJSONString(payData),null);

    // 接口返回二维码数据
    return JSON.parseObject(result);
}

csharp

// 完整项目地址:https://github.com/payjs-cn/sdk-csharp

Payjs pay = new Payjs("YOUR MCHID", "YOUR KEY");

Dictionary<string, string> param = new Dictionary<string, string>();
param["total_fee"] = "1";
param["out_trade_no"] = DateTime.Now.Ticks.ToString();
param["body"] = "test";
param["attch"] = "user id";
param["notify_url"] = "YOUR notify_url";

//返回原始json字符串
string jsonString = pay.native(param);

ruby

require 'digest'
require 'json'
require 'rest-client'

class Payjs
    MCHID = 'xxx'
    MCHKEY = 'xxx'

    def self.sign(data, key)
        data = data.sort
        sign_arr = data.map {|k, v| "#{k}=#{v}"}
        sign_str = sign_arr.join('&') + "&key=#{key}"
        Digest::MD5.hexdigest(sign_str).upcase
    end

    def self.create_order(trade_id, title="商品标题", total_fee=100)
        url = "https://payjs.cn/api/native"
        data = {
            "mchid" => MCHID,
            "total_fee" => total_fee,
            "out_trade_no" => trade_id,
            "body" => title,
        }
        data['sign'] = Payjs.sign(data, MCHKEY)
        res = RestClient.post(url, data.to_json, {content_type: :json, accept: :json})
        return JSON.parse(res.body)
    end
end

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文