上海讯联支付多用于pos机等的集成支付
下单支付理解
商家终端设备通过扫码枪或手工输入,获取用户支付宝或微信等客户端上的付款码,并同时将交易金额、支付条件信息(scanCodeId)等,发送到后台。正常情况下免密交易,后台会立即返回成功。仅当后台返回“09”处理中和接收超时情况,需要商家终端设备自动或手工调用查询订单接口,以确认交易是否成功
讯联数据支付使用流程
(1) http://www.cardinfolink.com/ 上海讯联数据找到云收银
(2) 商户选择申请流程获取客户端使用的各种信息
(3) 客户端进行集成
客户端实现流程
(1)项目添加CashierSdk包
(2)初始化
下单支付的情况
(3)获取顾客的微信或支付宝的客户端的付款码(通过扫描枪或其他设备扫描顾客的二维码获取付款码)
(4)调用下单支付功能
(5)当支付监听中监听到支付返回09或支付超时,需要我们自己调用查询的方法查看是否支付成功
实现例子:
public class MainActivityextends Activity {
private String orderNum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
orderNum=getIntent().getStringExtra("orderNum");//商品的订单号,非重复的
//1初始化
init();
//走下单支付
}
private void init(){
InitData initData = new InitData();
initData.mchntid = "*********";// 商户号,由讯联数据分配
initData.inscd = "*********";// 机构号,商户所属机构标识
initData.terminalid = "*********";// 终端号
initData.isProduce = true;// 生产环境必须将此值设为TRUE
initData.signKey = "*********";// 双方约定的签名密钥
// 初始化
CashierSdk.init(initData);
}
private void startPay(String scanCode){
OrderData data=new OrderData();
txamt="0.1";//订单交易金额,格式如:10,10.1,10.11
orderNum=orderNum;//支付方的订单号,同一个商户下的订单号不可重复
scanCodeId=scanCode;//终端扫出来的字符串(付款码)
currency="156";//币种,目前仅支持人民币,固定值为“156
CashierSdk.startPay(data,listener);
}
listener=new CashierListener(){
@Override
public void onError(int arg0) {
}
@Override
public void onResult(ResultData resultData) {
if("PURC".equals(resultData.busicd)){
//代表下单时,设置的监听返回的结果
if("00".equals(resultData.respcd)){
//代表支付成功
}else{
//即没有支付成功:可能为09需要商户手动完成支付操作,或超时同样需要商户手动完成操作
//可以在此添加弹窗询问是否需要完成支付
startQy();//未成功支付时,查询订单手动完成订单支付
}
}else if("INQY".equals(resultData.busicd)){
//当扫描支付未成功时查询信息手动支付调用监听返回结果
if ("SUCCESS".equals(resultData.errorDetail)) {
//手动支付成功
} else {
//手动支付失败//仍然可以再次查询,手动支付
}
}
}
};
private void startQy(){
OrderData data=new OrderData();
origOrderNum=orderNum;//支付方的原交易的订单号//支付方的订单号,同一个商户下的订单号不可重复
CashierSdk.startQy(data,listener);//查询的方法
}
}
退款流程:
基本与付款流程相同
public class MainActivityextends Activity {
private String orderNum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
orderNum=getIntent().getStringExtra("orderNum");//商品的订单号,非重复的
//1初始化
init();
}
private void init(){
InitData initData = new InitData();
initData.mchntid = "**********"; // 商户号,由讯联数据分配
initData.inscd = "*******"; // 机构号,商户所属机构标识
initData.terminalid = "*******"; // 终端号
initData.isProduce = true;// 生产环境必须将此值设为TRUE
initData.signKey = "*********"; // 双方约定的签名密钥
// 初始化
CashierSdk.init(initData);
}
private void startPay(String scanCode){
OrderData data=new OrderData();
txamt="0.1";//订单交易金额,格式如:10,10.1,10.11
orderNum=orderNum;//支付方的订单号,同一个商户下的订单号不可重复
scanCodeId=scanCode;//终端扫出来的字符串(付款码)
currency="156";//币种,目前仅支持人民币,固定值为“156
CashierSdk.startRefd(data,listener);
}
listener=new CashierListener(){
@Override
public void onError(int arg0) {
}
@Override
public void onResult(ResultData resultData) {
if("REFD".equals(resultData.busicd)){
//代表退款时,设置的监听返回的结果
if("00".equals(resultData.respcd)){
//代表退款成功
}else{
//即没有退款成功:可能为09需要商户手动完成支付操作,或超时同样需要商户手动完成操作
//可以在此添加弹窗询问是否需要完成退款
startQy();//未成功退款时,查询订单手动完成订单支付
}
}else if("INQY".equals(resultData.busicd)){
//当扫描支付未成功时查询信息手动支付调用监听返回结果
if ("SUCCESS".equals(resultData.errorDetail)) {
//手动退款成功
} else {
//手动退款失败//仍然可以再次查询,手动支付
}
}
}
};
private void startQy(){
OrderData data=new OrderData();
origOrderNum=orderNum;//支付方的原交易的订单号//支付方的订单号,同一个商户下的订单号不可重复
CashierSdk.startQy(data,listener);//查询的方法
}
}