PHP支付第3方接口使用方法。

去年写过一遍博客文章。

网站申请不到支付宝接口、微信接口,免接口收款实现方式。

网络在发展,支付宝也好,微信也好,技术在进步,这种方式已经不能使用了,明显的一个问题是,支付宝的刷新工具,会定时退出,必须人工输入才能再次登录。。

由于客户需要,想到了另外一种方法。

客户用正规的公司申请支付宝接口,微信接口,建立一个正规的网上商城类网站,这个网站只是一个中间网站,没有实际作用,当然所有功能都是正常的。

重点来了,,

我们可以在申请不到接口的网站,通过跳转到正规网站来完成支付,支付结果,也通过远程的方式反馈给调用支付的网站。

好像很多第3方集成支付工具,应该也是类似的用法。

上微信支付的代码。

header("Content-Type:text/html;charset=utf-8");

date_default_timezone_set(‘PRC‘);

require_once ‘config.php‘;

require_once WX_CLASS;

require_once ‘api/‘.UGL_CLASS;

require_once ‘api/‘.SESSION_CLASS;

require_once ‘api/libs/WxPay.Api.php‘;

require_once ‘api/libs/WxPay.JsApiPay.php‘;

error_reporting(0);

$get = $_GET;

$strArr = explode(‘x‘,$get[‘n‘]);

// http://meng.qiankk.com/demo/getOpenid.php?n=99x1x29191xyzd 贷款网站的支付格式

$type = (int)$strArr[0];

$num = (int)$strArr[1];

$wx=new WX_LC(ID,WX_APPID,WX_SECRET);

$code=$_GET[‘code‘];

if($code==‘‘){

$wx->getCode(‘snsapi_base‘);

exit(‘code empty‘);

}else{

$data=$wx->getOpenid($code);

if($data->errcode == 40029 || $data->errcode == 40163) {

$wx->getCode();

return;

}

if($type != 99){

$s = new S(ID);

$user = $s->getUser();

// echo ‘<pre>‘;

// print_r($user);

// die;

$user->openid = $data->openid;

$s->setUser($user);

}else {

$user = new stdClass();

$user->id = mt_rand(1000,99999);

$user->openid = $data->openid;

}

}

$feeArr1 = array(

array(‘day‘=>30,‘money‘=>48000),

array(‘day‘=>1,‘money‘=>3300),

array(‘day‘=>30,‘money‘=>48000),

array(‘day‘=>90,‘money‘=>99900),

array(‘day‘=>180,‘money‘=>180000),

array(‘day‘=>365,‘money‘=>320000)

);

$feeArr2 = array(

array(‘day‘=>30,‘money‘=>12000),

array(‘day‘=>1,‘money‘=>2300),

array(‘day‘=>30,‘money‘=>15000),

array(‘day‘=>90,‘money‘=>30000),

array(‘day‘=>180,‘money‘=>55000),

array(‘day‘=>365,‘money‘=>98000)

);

if($user && $user->id>0) {

$uid = $user->id;

} else {

exit(json_encode(array(‘result‘=>0, ‘msg‘=>‘user error!‘)));

}

if($type == 99){ //如果是贷款网站      重点在这里,,,,如果是从外站跳转过来的支付,,,,这里重新定义一些支付参数,发起微信支付,,,在回调页面,也做同样的判断就可以了

$order = (int)$strArr[2];

$dai = $strArr[3];//来源

$orderId = $dai.‘_‘.date(‘ymdHis‘).‘_‘.$order;

$fee = $num * 1;

$pid = $orderId;

pay($orderId,$fee,$user,$uid,$order ,$dai);

die;

}

$orderId = WxPayConfig::MCHID.date("YmdHis").rand(10, 99);

$now = time();

$arr=array(

‘p_id‘=>null,

‘p_uid‘=>$uid,

‘p_type‘=>$type,

‘p_num‘=>$num,

‘p_trade_no‘=>$orderId,

‘p_transaction_id‘=>‘‘,

‘p_buy‘=>‘‘,

‘p_create‘=>$now,

‘p_update‘=>$now,

‘p_more‘=>‘‘

);

$pid = $ugl->insert(DB_PREFIX.‘pay_log‘,$arr);

if($pid>0) {

if($type==1) {

$fee = $feeArr1[$num][‘money‘];

} else {

$fee = $feeArr2[$num][‘money‘];

}

//$fee = 10000;//($fee/1000)<0.01?0.1:($fee/1000);

pay($orderId,$fee,$user,$uid,$pid );

}else{

exit(‘pid error‘);

}

function pay($orderId,$fee,$user,$uid = 0,$pid = 0,$dai = ‘‘){

$ugl = new UGL_v2();

$tools = new JsApiPay();

$input = new WxPayUnifiedOrder();

$input->SetBody("12");

$input->SetAttach("123");

$input->SetOut_trade_no($orderId);

$input->SetTotal_fee($fee);

$input->SetTime_start(date("YmdHis"));

$input->SetTime_expire(date("YmdHis", time() + 600));

$input->SetGoods_tag("test");

$input->SetNotify_url(SHAREURL."demo/api/notify_b.php");

$input->SetTrade_type("JSAPI");

$input->SetOpenid($user->openid);

$order = WxPayApi::unifiedOrder($input);

$jsApiParameters = $tools->GetJsApiParameters($order);

$str = json_encode($order);

$ugl->addLog($uid,‘201‘,$str,‘下单‘.$pid);

$ec = "var jsApiParameters=$jsApiParameters; var myPid=$pid;";

echo "<script>$ec</script>";

include_once ‘callpay_b.html‘;

}

时间: 2024-08-07 06:39:53

PHP支付第3方接口使用方法。的相关文章

微信支付--维权接口开发!

原文链接:http://www.cnblogs.com/True_to_me/p/3663736.html 1.你需确定维权URL通知地址: 在"商户功能→商户信息→修改→维权通知URL"查看维权通知URL.(区分大小写) 2.添加用户维权入口 在服务号自定义菜单添加名称叫"维权"的菜单,该菜单不分层级,不分位置,微信自动跳转到维权页面.. 3.获取维权通知XML数据. 在ResponseHandler类(微信支付----没我想的那么难)添加获取XML参数的方法:

C#中接口和方法的运用(Fourteenth Day)

由于周五我有一些事情没来得及总结当天的知识,所以在今天总结一下周五在云和学院所学到的有关委托的知识. 理论: 接口: •接口的定义:interface关键字,接口中可以有属性.方法(未实现) •接口的名称通常以“I”开头,如IList •如果一个类即继承了类又实现了接口,那么类必须写在前面.一个类只能继承一个父类,但可以实现多个接口. •class Student : Person , IComparable(这是已经定义好的接口) •完全抽象的一种约定 •接口就是用来实现的 •语法: [访问修

序列化和持久化 merge方法和saveOrUpdate方法

merge方法和saveOrUpdate方法的区别 merge方法是把我们提供的对象转变为托管状态的对象:而saveOrUpdate则是把我们提供的对象变成一个持久化对象:说的通俗一点就是:saveOrUpdate后的对象会纳入session的管理,对象的状态会跟数据库同步,再次查询该对象会直接从session中取,merge后的对 象不会纳入session的管理,再次查询该对象还是会从数据库中取. 使用merge方法修改时如果两次修改的值没有变,它只会执行select而不会进行update.

java为什么要重写hashCode方法和equals方法?

之前发布过一篇文章说的是关于 equals方法重写 http://www.cnblogs.com/aL0n4k/p/4777333.html 下面就hashCode方法发表一下本人的理解,仅供参考,交流. 在 关于java重写equals方法 已经提及说,比较2个对象的时候,要比较他们各自的属性. 那么重写hashCode方法是因为我们在接触到集合的时候,里面有个Set接口,他只能添加无序以及不重复的对象元素. 那有人会问,既然是这样我们直接用equals判断不就完了么? 实际上对Set集合而言

Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权限修饰符,默认访问, 类,方法,成员变量 private 权限修饰符,私有访问, 方法,成员变量 static 静态修饰符 方法,成员变量 final 最终修饰符 类,方法,成员变量,局部变量 abstract 抽象修饰符 类 ,方法 我们编写程序时,权限修饰符一般放于所有修饰符之前,不同的权限修饰

virtual方法和abstract方法的使用(轉載)

在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别.二者都牵涉到在派生类中与override的配合使用. 一.Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法.virtual的使用会有两种情况: 情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法.那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法. 情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法.那么在对派生

线程Thread类的start()方法和run()方法

一.初识 java的线程是通过java.lang.Thread类来实现的.VM启动时会有一个由主方法所定义的线程.可以通过创建Thread的实例来创建新的线程.每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体.通过调用Thread类的start()方法来启动一个线程. 在Java当中,线程通常都有五种状态,创建.就绪.运行.阻塞和死亡. 第一是创建状态.在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态. 第二是就绪状态.

12函数式接口、方法引用

12.1  函数式接口 12.1.1 概念 1.函数式接口在Java中是指:有且仅有一个抽象方法的接口. 2.函数式接口,即适用于函数式编程场景的接口,而Java中的函数式编程体现就是Lambda,所有函数式接口就是可以适用于Lamnda使用的接口,只有确保接口中有且仅有一个抽象方法,java中的Lambda才能顺利地进行推导. 3.语法糖的定义:是指使用更加方便,但是原理不变的代码语法,例如在遍历集合时使用的for-each语法,其实底层的实现原理 仍然是迭代器,这就是语法糖,从应用层讲, j

Java8新特性(一)_interface中的static方法和default方法

为什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Collection中的default方法.所以准备专门写写关于java8新特性的文章,虽然现在10已经发布了.但还是要认真的去了解下新版本的变化. static方法 java8中为接口新增了一项功能:定义一个或者更多个静态方法.用法和普通的static方法一样. 代码示例 public interface