Native扫码支付(主扫)API
扫码请求步骤:
- 构建请求参数
- POST 参数到请求地址
- 根据返回内容展示二维码
- 用户支付成功后接收异步通知
请求地址:/api/native
请求参数:
字段名称 | 字段类型 | 必填参数 | 说明 |
---|---|---|---|
mchid | string(16) | Y | 商户号 |
total_fee | int(16) | Y | 金额。单位:分 |
out_trade_no | string(32) | Y | 用户端自主生成的订单号 |
type | string(16) | N | 留空表示微信支付。支付宝交易传值:alipay |
body | string(32) | N | 订单标题 |
attach | string(127) | N | 用户自定义数据,在notify的时候会原样返回 |
notify_url | string(255) | N | 接收微信支付异步通知的回调地址。必须为可直接访问的URL,不能带参数、session验证、csrf验证。留空则不通知 |
sign | string(32) | Y | 数据签名 详见签名算法 |
请求返回:
字段名称 | 字段类型 | 必填参数 | 说明 |
---|---|---|---|
return_code | int | Y | 1:请求成功,0:请求失败 |
status | int | N | return_code为0时有status参数为0。本参数即将舍弃,统一到return_code,请开发者看到后尽早删除 |
msg | string(16) | N | return_code为0时返回的错误消息 |
return_msg | string(16) | Y | 返回消息 |
payjs_order_id | string(16) | Y | 平台订单号 |
out_trade_no | string(16) | Y | 用户生成的订单号原样返回 |
total_fee | int(16) | Y | 金额。单位:分 |
qrcode | string(128) | Y | 二维码图片地址 |
code_url | string(64) | Y | 可将该参数生成二维码展示出来进行扫码支付 |
sign | string(64) | Y | 数据签名 详见签名算法 |
扫码支付演示:
<?php
class Payjs {
private $url = 'https://payjs.cn/api/native';
private $mchid = ''; // 特写商户号
private $key = ''; // 填写通信密钥
public function __construct($data=null) {
$this->data = $data;
}
public function pay(){
$data = $this->data;
$data['mchid'] = $this->mchid;
$data['sign'] = $this->sign($data);
return $this->post($data, $this->url);
}
public function post($data, $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$rst = curl_exec($ch);
curl_close($ch);
return $rst;
}
public function sign(array $attributes) {
ksort($attributes);
$sign = strtoupper(md5(urldecode(http_build_query($attributes)) . '&key=' . $this->key));
return $sign;
}
}
$order = [
'body' => 'test', // 订单标题
'out_trade_no' => time(), // 订单号
'total_fee' => 120, // 金额,单位:分
];
$payjs = new Payjs($order);
$rst = $payjs->pay();
print_r($rst);
?>
php
<?php
class Payjs {
private $url = 'https://payjs.cn/api/native';
private $mchid = ''; // 特写商户号
private $key = ''; // 填写通信密钥
public function __construct($data=null) {
$this->data = $data;
}
public function pay(){
$data = $this->data;
$data['mchid'] = $this->mchid;
$data['sign'] = $this->sign($data);
return $this->post($data, $this->url);
}
public function post($data, $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$rst = curl_exec($ch);
curl_close($ch);
return $rst;
}
public function sign(array $attributes) {
ksort($attributes);
$sign = strtoupper(md5(urldecode(http_build_query($attributes)) . '&key=' . $this->key));
return $sign;
}
}
$order = [
'body' => 'test', // 订单标题
'out_trade_no' => time(), // 订单号
'total_fee' => 120, // 金额,单位:分
];
$payjs = new Payjs($order);
$rst = $payjs->pay();
print_r($rst);
?>
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())