码支付

1分钟快速集成

1 年前

本教程主要为快速集成 您可以快速集成到您的网站或APP 我们另外提供了更加详细的API在下载中心



免费软件版工作原理:创建订单--》云端保存订单--》用户付款直接到你手里--》辅助软件提取订单数据--》辅助软件通知您网站处理


会员软件版工作原理:创建订单--》云端保存订单--》用户付款直接到你手里--》官方通知我们--》我们服务器通知您网站处理


代收款工作原理:钱付款到我们的账号--》我们的软件通知您网站处理




软件版优点:钱不经过我们 自己的网站收银 自行控制二维码 安全放心 全免没其他任何费用。


会员软件版优点:无需辅助通知 支付宝免制作二维码 自己的网站收银 钱不经过我们 直接到你手里 稳定安全放心


代收款优点:不需要挂机 不需要制作收款码 简单但会产生费用 详情可登录后台查看



生成您的快捷支付页:

http://codepay.fateqq.com:52888/codepay.html?id=您的码支付ID&token=您后台设置的token


系统设置中已经帮您生成好了 可以直接去获取


将以上地址中的中文替换为您的收款信息。 

token:为方便快捷创建订单 在后台【系统设置】生成或自行设置。 留空则不允许使用token令牌创建订单 必须为MD5签名数据


您可能会遇到以下问题:

1:报错软件未启动

解决办法:软件版需要运行软件 代收款无需软件


2:显示无收款码

解决办法:进入后台上传一个收款码  制作二维码教程   

(浏览器不支持则使用手机或更新浏览器 推荐为chrome) 友好支持全部手机直接上传哦


3:上传二维码的时候无法识别

解决办法:使用手机截屏的方式


4:提示错误:not vip

可能有以下原因:

1:id值填写错误 填写了一个不存在的ID 

2:如果为微信支付则需要开通软件版

3:如果为代收款未开通 金额超出了1元


5:提示错误:sign fail

解决方法:确认您输入的token跟后台一致  如果为md5签名数据则确认您的通信密钥是否与后台一致


6:软件版付款时要输入金额

解决方法:制作几个常用的金额 批量上传到云端 (浏览器不支持则使用手机或更新浏览器 推荐为chrome)


7:提示错误:qrcode too litle

解决办法:在后台【系统设置】调整金额 增加 或 减少


8:付款后不通知

解决办法:

1:检查是否设置或传递了通知地址。

2:软件版需要检查是否登录了该收款账号。如果登录了则软件上会看到失败的原因


示例1:(debug未启动软件会提示)

http://codepay.fateqq.com:52888/codepay.html?id=10041&token=888888&debug=1


示例2:(style使用其他支付页)

http://codepay.fateqq.com:52888/codepay.html?id=10041&token=888888&debug=1&style=1


示例3:(price给一个固定金额不可更改)

http://codepay.fateqq.com:52888/codepay.html?id=10041&token=888888&debug=1&price=88


示例4:(pay_id给一个固定用户标识不可更改)

http://codepay.fateqq.com:52888/codepay.html?id=10041&token=888888&pay_id=168&debug=1


示例5:(act使用代收款 未开通将只能创建1元以下订单用于测试)

http://codepay.fateqq.com:52888/codepay.html?id=10041&token=888888&price=0.6&act=1


示例6:(notify_url付款成功后通知http://codepay.fateqq.com/notify.php处理业务)

http://codepay.fateqq.com:52888/codepay.html?id=10041&token=888888&price=0.7&notify_url=http://codepay.fateqq.com:52888/notify.php


示例7:(return_url付款成功跳转到http://codepay.fateqq.com:52888/demo_show.html也能处理业务)

http://codepay.fateqq.com:52888/codepay.html?id=10041&token=888888&price=0.8&return_url=http://codepay.fateqq.com:52888/demo_show.html

注意如果url带参数您需要自行过滤该参数后再签名 否则通知的时候签名不会通过 



插入到您网页HTML代码:

<iframe src="http://codepay.fateqq.com:52888/codepay.html?id=您的码支付ID&token=您后台设置的token" width="100%" height="100%" frameborder="no" border="0" scrolling="no" allowtransparency="yes"></iframe>


代码示例:

<iframe src="http://codepay.fateqq.com:52888/codepay.html?id=10041&token=888888" width="100%" height="100%" frameborder="no" border="0" scrolling="no" allowtransparency="yes"></iframe>


 




====================================

快捷创建订单接口:(这是直接进入付款页或根据返回的数据可自行开发付款页面)


http://codepay.fateqq.com:52888/creat_order/?id=您的码支付ID&token=您后台设置的token&price=价格&pay_id=用户标识&type=支付类型&page=1

支付类型:1:支付宝  2:QQ钱包 3:微信支付


示例:用户admin 创建支付宝 108元的订单 (直接显示支付页面)

http://codepay.fateqq.com:52888/creat_order/?id=10041&token=888888&price=108&pay_id=admin&type=1&page=1&debug=1&act=0


act=0: 0表示及时到账 1则为我们代收款(代收需开通 否则只能创建1元以下的订单)

debug=1: 软件未启动的话 会出现提示


更多参数请参考:http://codepay.fateqq.com:52888/apiword/r1YwqrOte.html    



示例:(JS调用 返回给callback 自行开发支付页面)

http://codepay.fateqq.com:52888/creat_order/?id=10041&token=888888&price=1&pay_id=admin&type=1&page=3&call=callback

返回:

callback({"money":"1.00","tag":"0","endTime":1488787547,"trueID":10041,"userID":1,"type":1,"come":1,"order_id":"1397725","pay_id":"admin","status":0,"msg":"ok","mode":1,"qrcode":"http://codepay.fateqq.com:52888/qr/1/1/1/0_0.png","price":1.00,"https":0,"chart":"utf-8","serverTime":1488787187,"notiry_key":"9e4f86c6f15ea7e64822aa350d6187e0"});



示例:(返回JSON 任何地方都可使用比如APP 软件 脚本)

http://codepay.fateqq.com:52888/creat_order/?id=10041&token=888888&price=1&pay_id=admin&type=1&page=4


返回:

{"userID":10041,"money":"1.00","price":"1.00","chart":"utf-8","pay_id":"admin","type":1,"call":"","trueID":10041,"tag":1,"come":2,"endTime":1488786999,"order_id":"1337206","status":0,"msg":"ok","mode":1,"qrcode":"http://codepay.fateqq.com:52888/qr/1/1/1/0_1.png","https":0,"serverTime":1488786639,"notiry_key":"6fb8bc7bb36d11631e0bd4e5ad7e083a"}

不知道返回参数代表什么 可看这篇介绍 http://codepay.fateqq.com:52888/apiword/r1YwqrOte.html   


=============================================================

检查订单状态:(我们的API以及支付页面默认全集成好了支付后跳转)

http://codepay.fateqq.com:52888/ispay?id=您的ID码支付&order_id=创建订单返回了该值&token=您的token令牌后台可得到&call=callback

JS调用示例:

http://codepay.fateqq.com:52888/ispay?id=10041&order_id=1337206&token=888888&call=callback

JSON调用示例:

http://codepay.fateqq.com:52888/ispay?id=10041&order_id=1337206&token=888888
返回:
{"status":0,"endTime":1488786999,"pay_time":0,"money":1,"msg":"ok"}

status为1 表示付款但通知失败 2:订单已经处理完成


=============================================================

付款成功后通知您的网站处理:

PHP代码: (其他语言可参考接口文档) 

<?php
ksort($_POST); //排序post参数
reset($_POST); //内部指针指向数组中的第一个元素
$sign = '';
foreach ($_POST AS $key => $val) {
    if ($val == '') continue; //跳过空值
    if ($key != 'sign') { //跳过sign
        $sign .= "$key=$val&"; //拼接为url参数形式
    }
}
if (!$_POST['pay_no']||md5(substr($sign, 0, -1) . "替换密钥") != $_POST['sign']) { //KEY密钥为你的密钥
  //不合法的数据 不做处理
   exit('fail');
}else{ //合法的数据
    //业务处理
   // $_POST['pay_id'] 这是付款人的唯一身份标识或订单ID
   // $_POST['pay_no'] 这是流水号 没有则表示没有付款成功 流水号不同则为不同订单
   // $_POST['money'] 这是付款金额
   //  $_POST['param'] 这是自定义的参数
   exit('success');
}


JAVA代码:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>
<%@ page import="java.security.MessageDigest"%>
<%@ page import="java.math.*"%>

<%
	/**
	*验证通知 处理自己的业务
	*/
	String key = "通信密钥"; //记得更改 http://codepay.fateqq.com 后台可设置
	Map<String,String> params = new HashMap<String,String>(); //申明hashMap变量储存接收到的参数名用于排序
	Map requestParams = request.getParameterMap(); //获取请求的全部参数
	String valueStr = ""; //申明字符变量 保存接收到的变量
	for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
		String name = (String) iter.next();
		String[] values = (String[]) requestParams.get(name);
		valueStr = values[0];
		//乱码解决,这段代码在出现乱码时使用。如果sign不相等也可以使用这段代码转化
		//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
		params.put(name, valueStr);//增加到params保存
	}
	List<String> keys = new ArrayList<String>(params.keySet()); //转为数组
  	Collections.sort(keys); //重新排序
	String prestr = "";
	String sign= params.get("sign"); //获取接收到的sign 参数
	
        for (int i = 0; i < keys.size(); i++) { //遍历拼接url 拼接成a=1&b=2 进行MD5签名
            String key_name = keys.get(i);
            String value = params.get(key_name);
	    	if(value== null || value.equals("") ||key_name.equals("sign")){ //跳过这些 不签名
	    		continue;
	    	}
	    	if (prestr.equals("")){
	    		prestr =  key_name + "=" + value;
	    	}else{
				prestr =  prestr +"&" + key_name + "=" + value;
	    	}
        }
	MessageDigest md = MessageDigest.getInstance("MD5");
	md.update((prestr+key).getBytes());
	String  mySign = new BigInteger(1, md.digest()).toString(16).toLowerCase();
	if(mySign.length()!=32)mySign="0"+mySign; //MD5值不足位数首位补0
	if(mySign.equals(sign)){ 
		//编码要匹配 编码不一致中文会导致加密结果不一致
		//参数合法处理业务
		//request.getParameter("pay_no") 流水号
		//request.getParameter("pay_id") 用户唯一标识
		//request.getParameter("money") 付款金额
		//request.getParameter("price") 提交的金额
		out.print("ok");
	}else{
		//参数不合法
		out.print("fail");
	}
%>