PHP支付第3方接口使用方法。
Posted 老凡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\';
}
以上是关于PHP支付第3方接口使用方法。的主要内容,如果未能解决你的问题,请参考以下文章