php支付程序
❶ php怎么做银联的支付接口调用
PHP做银联支付接口调用问题
//在工商支付接口之前要找到工行提供的接口文件级dll文件
//将订单签名数据公钥加密提供给工行指定页面
//组织要签名的数据串
$src="ICBC_PERBANK_B2C1.0.0.0".$infomer["merid"].$infomer["meracct"].$returnaddress."HS".$ddnumber.$amount."0010".$nowtime."0";
$com=new com('ICBCEBANKUTIL.B2CUtil');
$rc=$com->init("c:\WINDOWS\user.crt","c:\WINDOWS\user.crt","c:\WINDOWS\user.key","11111111");
$ssrc=$com->signC($src, strlen($src)); //订单签名数据
$rc=$com->verifySignC($src,strlen($src), $ssrc, strlen($ssrc));
$cert=$com->getCert(1); //商城证书公钥
//将商户证书存储到c:\WINDOWS目录下,然后创建form表单,将指定的数据提交到工行指定的网页中
<!--支付宝支付的接口操作,提交的数据-->
<td width="100"><a href="<{$link}>"><img src="images/sy_19.gif" width="90" height="25" border="0"></a></td>
<!--——————————————————-->
<!--工行支付的接口操作,提交的数据-->
<form action="https://mybank.icbc.com.cn/" method="post" name="form_bank">
<input name="interfaceName" type="hidden" value="ICBC_PERBANK_B2C"/>
<input name="interfaceVersion" type="hidden" value="1.0.0.0"/>
<input name="orderid" type="hidden" value="<{$ddnumber}>"/>
<input name="amount" type="hidden" value="<{$amount}>"/>
<input name="curType" type="hidden" value="001"/>
<input name="merID" type="hidden" value="<{$merid}>"/>
<input name="merAcct" type="hidden" value="<{$meracct}>"/>
<input name="verifyJoinFlag" type="hidden" value="0"/>
<input name="notifyType" type="hidden" value="HS"/>
<input name="merURL" type="hidden" value="<{$returnaddress}>"/>
<input name="resultType" type="hidden" value="0"/>
<input name="orderDate" type="hidden" value="<{$nowtime}>"/>
<input name="merSignMsg" type="hidden" value="<{$ssrc}>" />
<input name="merCert" type="hidden" value="<{$cert}>" />
</form>
❷ PHP对接第三方支付渠道之微信支付v3版本
文接上篇 PHP如何更科学地接入第三方渠道 ,既然已经写到这了,索性创建了一个gitee仓库,地址: https://gitee.com/wuzhh/tp6-payment ,有需要的可以去看看。
言归正传,微信支付v3版本刚推出不久,鉴于微信官方一贯语焉不详的尿性,论坛上自然仍旧一片哀嚎,鄙人一路踩坑下来,倒也还算顺利,把过程分享给大家参考~
在微信商户平台中找到API安全,这一步按照官方提示操作即可,比较简单不再赘述
注意,第1步中导出的证书有三个文件,以我的经验只有apiclient_key.pem是有用的,apiclient_cert.pem则没什么用(没发现它有什么用),拿到apiclient_key.pem的路径之后:
上面是官方提供的命令,此处:
apiV3key = 设置的v3秘钥
mchId = 商户号
mchPrivateKeyFilePath = apiclient_key.pem的路径
mchSerialNo = 商户API证书序列号
outputFilePath = 微信支付平台证书的存储路径
你可能会问,-c参数填啥?这里需要说一下这个参数是验证证书用的,填的是微信支付平台证书的路径,因为我们现在是 第一次创建证书,所以-c参数不需要填写 ,需要特别注意一下。
这样就能确保上文注入的支付实例都有共同的支付和回调方法
有部分方法文中没上,我个人的项目中用上了,就暂且保留吧
通知部分过段时间再更,明天就算端午节就更到这了,有需要的小伙伴可以留言,我争取尽快补上~
❸ php 后台怎么把多种支付方式集成在一起 可以先择性安装
本文将介绍如何快速通过PHP类库来集成、整合支付宝来实现充值功能。如果你的系统想要扩充积分、账户余额等功能,那么就要选择一个第三方支付系统来充值。
支付宝集成时,需要三大步:
1、通过表单提交信息,系统整合信息,提交信息到支付宝;
2、用户进行支付后,支付宝后台通知系统处理;
3、支付宝后台通知完成后,支付宝前台跳转到系统返回地址;
支付宝PHP类
PHP 类alipay_notify,主要功能是付款过程中服务器通知处理。
PHP 类alipay_service,根据支付宝外部服务接口生成支付宝地址。
我把这2个类,集中到一个文件alipay.class.inc中,点击这里查看并下载PHP支付宝类源码。
下面主要主要讲解通过支付宝的PHP类来实现整合。
PHP支付宝集成
第一步,建立提交充值的基本信息:
fubao-chong PHP支付宝集成 建立提交充值的基本信息
第二步,验证用户提交的金额正确,通过表单验证后,通过支付宝alipay_service类生成支付宝链接,然后跳转到支付宝链接。
function index() {
$total = intval($_POST['total']);
if (!$total) {
$total = 1;
}
$pay_bank = trim($_POST['pay_bank']);
$account = $_POST['_account'];
$base_path = ‘http://’.$_SERVER['HTTP_HOST'].base_path();
$order_id = date(‘YmdHis’, time()); //时间值作为唯一的订单ID号
$subject = $body = ‘LixiPHP充值’.$total.’元’;
$out_trade_no = date(‘YmdHis’, time()).’-’.$account->student['sid'];
//合作身份者ID,以2088开头的16位纯数字
$partner = ’20887015**9*7**’;
//安全检验码,以数字和字母组成的32位字符
$security_code = ‘gc2qxh4**ab***3jp8*****2ptxewks4′;
//签约支付宝账号或卖家支付宝帐户
$seller_email = ‘[email protected]’;
$_input_charset = "UTF-8";
$sign_type = "MD5"; //签名方式
$transport = ‘https’;//字符编码格式
$parameter = array(
"service" => "create_direct_pay_by_user", //交易类型
"partner" => $partner, //合作商户号
"return_url" => $base_path.’alipay/return’, //同步返回
"notify_url" => $base_path.’alipay/notify’, //异步返回
"_input_charset" => ‘UTF-8′, //字符集,默认为GBK
"subject" => $subject, //商品名称,必填
"body" => $subject, //商品描述,必填
"out_trade_no" => $out_trade_no, //商品外部交易号,必填(保证唯一性)
"price" => $total, //商品单价,必填(价格不能为0)
"payment_type" => "1", //默认为1,不需要修改
"quantity" => "1", //商品数量,必填
"paymethod" => ‘directPay’,
"defaultbank" => $pay_bank,
"logistics_fee" =>’0.00′, //物流配送费用
"logistics_payment" =>’BUYER_PAY’, //物流费用付款方式:SELLER_PAY(卖家支付)、BUYER_PAY(买家支付)、BUYER_PAY_AFTER_RECEIVE(货到付款)
"logistics_type" =>’EXPRESS’, //物流配送方式:POST(平邮)、EMS(EMS)、EXPRESS(其他快递)
//"receive _mobile" => ”, //收货人手机
"show_url" => $base_path, //商品相关网站
"seller_email" => $seller_email, //卖家邮箱,必填
);
require("../libraries/payment/alipay.class.inc");
$alipay = new alipay_service($parameter, $security_code, $sign_type);
$link = $alipay->create_url();
header("Location: ".$link);
}
用户跳转到支付宝支付界面后,默认的支付银行是在提交表单前选择的网上银行,选择支付宝的话就是使用支付宝余额支付。然后就是等待用户支付了。用户完成支付后,请会发生下面的几个步骤,当然如果用户放弃支付的话,就没有后面的处理了。
第三步,用户进行支付后,支付宝后台通知系统处理。系统处理页面主要是根据生成支付宝链接是使用的notify_url来决定的。它处理完成后,成功返回success,失败返回fail,如果支付宝收到的是fail,那么支付宝还会在隔1小时,1天,1周等周期再次通知服务器处理,这里的周期需求向支付宝询问。如果支付宝收到的是success,注意支付宝好像在一个月后要发送一次TRADE_FINISHED表示交易完成,这个一定不要再给用户加一次充值了。
function alipay_notify() {
$out_trade_no = date(‘YmdHis’, time()).’-’.$account->student['sid'];
//合作身份者ID,以2088开头的16位纯数字
$partner = ’20887015**9*7**’;
//安全检验码,以数字和字母组成的32位字符
$security_code = ‘gc2qxh4**ab***3jp8*****2ptxewks4′;
//签约支付宝账号或卖家支付宝帐户
$seller_email = ‘[email protected]’;
$sign_type = "MD5";
$_input_charset = ‘UTF-8′;
$transport = ‘https’;
require("../libraries/payment/alipay.class.inc");
$alipay = new alipay_notify($partner,$security_code,$sign_type,$_input_charset,$transport);
$verify_result = $alipay->notify_verify();
//支付宝 Notice verify
if($verify_result) {
//认证合格
//获取支付宝的反馈参数
//获取支付宝传递过来的订单号
$order_id = $_POST['out_trade_no'];
//获取支付宝传递过来的总价格
$total_fee = $_POST['total_fee'];
//拆分订单号为订单和学员ID
$txn_id = explode(‘-’, $order_id);
$real_orderid = $txn_id[0]; //get the real order
$sid = $txn_id[1];
if($_POST['trade_status'] == ‘TRADE_SUCCESS’) {
//这里放入你自定义代码,比如根据不同的trade_status进行不同操作
mysql_query("UPDATE {student} set balance = balance+%d where sid = %d", (int) $total_fee, $sid);
mysql_query("INSERT INTO {payment_receipts} (sid, order_id, amount, received) VALUES (%d, ‘%s’, %f, %d)", $sid, $real_orderid, (int) $total_fee, time());
echo "success";
}
else {
echo "fail";
}
}
else {
echo "fail";
}
}
第四步,用户完成支付后,支付宝前台跳转到系统返回地址。这个页面其实可以只做一个非常简单页面,不用做任何验证。但是为了安全建议也做一下返回验证。但是最后不要在返回页面做数据库操作。
function alipay_return() {
$out_trade_no = date(‘YmdHis’, time()).’-’.$account->student['sid'];
//合作身份者ID,以2088开头的16位纯数字
$partner = ’20887015**9*7**’;
//安全检验码,以数字和字母组成的32位字符
$security_code = ‘gc2qxh4**ab***3jp8*****2ptxewks4′;
//签约支付宝账号或卖家支付宝帐户
$seller_email = ‘[email protected]’;
$sign_type = "MD5";
$_input_charset = ‘UTF-8′;
$transport = ‘https’;
require("../libraries/payment/alipay.class.inc");
$alipay = new alipay_notify($partner,$security_code,$sign_type,$_input_charset,$transport);
$verify_result = $alipay->return_verify();
$order_id = $_GET['out_trade_no']; //获取订单号
$total_fee = (int) $_GET['total_fee']; //获取总价格
$txn_id = explode(‘-’, $order_id);
$real_orderid = $txn_id[0]; //get the real order
$sid = $txn_id[1];
//认证合格
if($verify_result) {
$output = ‘<h2>恭喜您,学员ID’.$sid.’充值’.$total_fee.’元成功!</h2>’;
$student = mysql_query("SELECT uid, balance FROM {student} WHERE sid = %d", $sid);
$output .= ‘<p>您目前的余额’.$student->balance.’元。</p>’;
$output .= l(‘查看记录’, ‘user/’.$student->uid.’/depositlogs’);
return $output;
}
else {
$output = ‘<h2>你的订单支付过程出现故障!</h2>’;
$output .= ‘<p>您的交易信息是无效的,如果你使用的是已有的返回信息的话,那么交易已经成立,你可以查看我的订单历史。<br>如果你是黑客的话,俺是守法的好公民,希望你能饶了我这个小店。’;
$output .= ‘</p><p><a href="/">返回首页</a></p>’;
return $output;
}
}
如果用户是恶意修改网址参数,将会看到:
callback return failed 如果用户是恶意修改网址参数
如果用户正常通过支付宝自动跳转回来的,将会看到:
callback return success 如果用户正常通过支付宝自动跳转回来的
好的,赶快将以上方法和代码应用到你的积分、账户余额系统把!
❹ PHP 支付宝网页支付怎么写
1)打开上面的网页,从页面下方的7中支付方式中选择你需要的方式并点击进去,
2)点击demo下载选择对应你需求的demo
3)把demo代码引入到你的php项目中,lib里的内容不需要你做任何更改,阅读readme说明文档,在吧除lib外的php文件都看一遍,里面每个参数的作用都说明的很清楚,文件里的index.php就是你要用curl去模拟支付请求的路径,当然你配置完成后也可以打开index.php去完成一次支付
❺ PHP码支付V3.1开源版程序谁有
V免签 —— 个人开发者收款解决方案
V免签 是基于SpringBoot 2.1.1 实现的一套免签支付程序,主要包含以下特色:
收款即时到账,无需进入第三方账户,收款更安全
使用H2-Database,仅需安装java环境,简单配置,一键搭建
超简单Api使用,提供统一Api实现收款回调
免费、开源,无后门风险
支持监听店员收款信息,可使用支付宝微信小号/模拟器挂机,方便IOS用户
免root,免xp框架,不修改支付宝/微信客户端,防封更安全
- 如果您不熟悉Java的配置,您可以使用PHP版本的服务端
- V免签仅供个人开发者调试测试使用,请勿用于非法用途,商用请您申请官方商户接口
- 项目详情和地址更多核心内容在文章最后压轴
下载已经编译好的war
确认本机已经拥有java的运行环境(JDK>=1.8),如果没有,请您安装java的运行环境
在war包的同级目录,在控制台输入启动命令 java -jar v.war
请将v.war替换成您下载的war包的名字
如果您需要自定义项目的运行端口,请您在启动的时候使用:java -jar v.war --server.port=9090 (9090可以替换成任意端口)
打开浏览器,访问 localhost:8080
点击系统设置,进入设置页面,修改系统的默认配置
默认管理账号为:admin
默认通讯密钥为:admin
保存配置后,即可开始使用
- 升级说明:请您直接下载新版本覆盖旧版本即可!
请部署完成后访问后台,有详细的Api说明
本系统原理为监控收款后手机的通知栏推送消息,所以请保持微信/支付宝/V免签监控端后台正常运行,且添加到内存清理白名单!
v免签的原理是监控手机收到收款后的通知栏推送信息,所以不适合于商用多用户的情况,如果您想用于商用,请二次开发!
v免签拥有双语言服务端,当您使用php版本服务端遇到问题的时候,请您尝试使用java版本服务端,php版本服务端配置略复杂,需要配置伪静态规则,请知悉!
v免签支持的通知有:
支付宝个人收款的推送通知
支付宝商家二维码的收款推送通知
支付宝店员通绑定的店员账号收款的推送通知
微信二维码收款推送通知
微信店员收款推送通知
后台演示:
安装
说明
注意
Github 地址
https://github.com/zql001/liaotui_public/blob/master/READEME3.md
❻ Thinkphp5.1寰淇″皬绋嫔簭鏀浠
镰旂┒浜嗗ソ鍑犲ぉ锛屽潙涔熼亣鍒颁简锛屼篃锏惧害浜嗗緢涔呯幇鍦ㄧ粓浜庡仛瀹屼简锛岀粰澶у跺垎浜鍑烘潵锛
鎴戣繖涓涔熸槸鍙傝冨埆浜哄啓镄勚傛湁涓嶆槑锏界殑链嫔弸鍙浠ラ梾鎴
public function unifiedorder($order_no, $openid, $total_fee, $attach, $order_id, $user_id){
// 褰揿墠镞堕棿
$time = time();
// 鐢熸垚闅忔満瀛楃︿覆
$nonceStr = md5($time . $openid);
// API鍙傛暟
$params = [
'appid' => $this->appid, //寰淇″垎閰岖殑灏忕▼搴廼d
'attach' => $attach, //闄勫姞鏁版嵁锛屽湪镆ヨAPI鍜屾敮浠橀氱煡涓铡熸牱杩斿洖锛屽彲浣滀负镊瀹氢箟鍙傛暟浣跨敤銆
'body' => '浼氩憳鍗', //鍕熸崘鎻忚堪
'mch_id' => $this->mchid, //寰淇℃敮浠桦垎閰岖殑鍟嗘埛鍙
'nonce_str' => $nonceStr, //闅忔満瀛楃︿覆锛32浣崭互鍐
'notify_url' => $this->notify_url, // base_url() . 'notice.php?s=/task/notify/order/wxapp_id/'.$wxapp_id, // 寮傛ラ氱煡鍦板潃
'openid' => $openid, //鐢ㄦ埛镙囱瘑锛泃rade_type=JSAPI锛屾ゅ弬鏁板繀浼狅纴鐢ㄦ埛鍦ㄥ晢鎴穉ppid涓嬬殑鍞涓镙囱瘑銆
'out_trade_no' => $order_no, //鍟嗘埛璐﹀崟鍙
'spbill_create_ip' => \request()->ip(), //缁堢疘P锛涙敮鎸両PV4鍜孖PV6涓ょ嶆牸寮忕殑IP鍦板潃銆傝皟鐢ㄥ井淇℃敮浠楢PI镄勬満鍣↖P
'total_fee' => (int)$total_fee * 100, // 浠锋牸:鍗曚綅鍒 // 浠锋牸:鍗曚綅鍒
'trade_type' => 'JSAPI', //浜ゆ槗绫诲瀷
];
// 鐢熸垚绛惧悕
$params['sign'] = $this->makeSign($params); //杩欎釜鍦版柟链鍧戯纴闇瑕佺殑鏄閰岖疆 1銆乤ppid鍜屽晢鎴峰彿蹇呴’鏄缁戝畾镄勭姸镐
// 璇锋眰API
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$result = $this->post($url, $this->toXml($params));
$prepay = $this->fromXml($result);
//娣诲姞preapay_id
$data = [
'user_id' => $user_id,
'order_id' => $order_id,
'attach' => json_encode($attach),
'prepay_id' => $prepay['prepay_id'],
];
(new AppleWxPrepay())->addInfo($data);
// 璇锋眰澶辫触
if ($prepay['return_code'] === 'FAIL') {
return [API_CODE_NAME => 2000004, API_MSG_NAME => $prepay['return_msg']];
}
if ($prepay['result_code'] === 'FAIL') {
return [API_CODE_NAME => 2000004, API_MSG_NAME => $prepay['err_code_des']];
}
// 鐢熸垚 nonce_str 渚涘墠绔浣跨敤
$paySign = $this->makePaySign($params['nonce_str'], $prepay['prepay_id'], $time);
return [
'prepay_id' => $prepay['prepay_id'],
'nonceStr' => $nonceStr,
'timeStamp' => (string)$time,
'paySign' => $paySign
];
}
/**
* 鐢熸垚绛惧悕
* @param $values
* @return string 链鍑芥暟涓嶈嗙洊sign鎴愬憳鍙橀噺锛屽傝佽剧疆绛惧悕闇瑕佽皟鐢⊿etSign鏂规硶璧嫔
*/
private function makeSign($values)
{
//绛惧悕姝ラや竴锛氭寜瀛楀吀搴忔帓搴忓弬鏁
ksort($values);
$string = $this->toUrlParams($values);
//绛惧悕姝ラや簩锛氩湪string钖庡姞鍏KEY
$string = $string . '&key=' . $this->apikey;
//绛惧悕姝ラや笁锛歁D5锷犲瘑
$string = md5($string);
//绛惧悕姝ラゅ洓锛氭墍链夊瓧绗﹁浆涓哄ぇ鍐
$result = strtoupper($string);
return $result;
}
/**
* 镙煎纺鍖栧弬鏁版牸寮忓寲鎴耻rl鍙傛暟
* @param $values
* @return string
*/
private function toUrlParams($values)
{
$buff = '';
foreach ($values as $k => $v) {
if ($k != 'sign' && $v != '' && !is_array($v)) {
$buff .= $k . '=' . $v . '&';
}
}
return trim($buff, '&');
}
/**
* 妯℃嫙POST璇锋眰
* @param $url
* @param array $data
* @param bool $useCert
* @param array $sslCert
* @return mixed
*/
public function post($url, $data = [], $useCert = false, $sslCert = [])
{
$header = [
'Content-type: application/json; charset=UTF8'
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
if ($useCert == true) {
// 璁剧疆璇佷功锛歝ert 涓 key 鍒嗗埆灞炰簬涓や釜.pem鏂囦欢
curl_setopt($curl, CURLOPT_SSLCERTTYPE, 'PEM');
curl_setopt($curl, CURLOPT_SSLCERT, $sslCert['certPem']);
curl_setopt($curl, CURLOPT_SSLKEYTYPE, 'PEM');
curl_setopt($curl, CURLOPT_SSLKEY, $sslCert['keyPem']);
}
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
/**
* 杈揿嚭xml瀛楃
* @param $values
* @return bool|string
*/
private function toXml($values)
{
if (!is_array($values) || count($values) <= 0) {
return false;
}
$xml = "<xml>";
foreach ($values as $key => $val) {
if (is_numeric($val)) {
$xml .= "<" . $key . ">" . $val . "</" . $key . ">";
} else {
$xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
}
}
$xml .= "</xml>";
return $xml;
}
/**
* 灏唜ml杞涓篴rray
* @param $xml
* @return mixed
*/
private function fromXml($xml)
{
// 绂佹㈠紩鐢ㄥ栭儴xml瀹炰綋
libxml_disable_entity_loader(true);
return json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
}
/**
* 鐢熸垚paySign
* @param $nonceStr
* @param $prepay_id
* @param $timeStamp
* @return string
*/
private function makePaySign($nonceStr, $prepay_id, $timeStamp)
{
$data = [
'appId' => $this->appid,
'nonceStr' => $nonceStr,
'package' => 'prepay_id=' . $prepay_id,
'signType' => 'MD5',
'timeStamp' => $timeStamp,
];
// 绛惧悕姝ラや竴锛氭寜瀛楀吀搴忔帓搴忓弬鏁
ksort($data);
$string = $this->toUrlParams($data);
// 绛惧悕姝ラや簩锛氩湪string钖庡姞鍏KEY
$string = $string . '&key=' . $this->apikey;
// 绛惧悕姝ラや笁锛歁D5锷犲瘑
$string = md5($string);
// 绛惧悕姝ラゅ洓锛氭墍链夊瓧绗﹁浆涓哄ぇ鍐
$result = strtoupper($string);
return $result;
}
/*********************************寰淇″洖璋**********************/
public function getNotify()
{
if (!$xml = file_get_contents('php://input')) {
$this->returnCode(50000001, 'Not found DATA');
}
// 灏嗘湇锷″櫒杩斿洖镄刋ML鏁版嵁杞鍖栦负鏁扮粍
$data = $this->fromXml($xml);
$payLog = new ApplePayLog();
// 璁板綍镞ュ织
$payLog->addInfo(['content'=>json_encode($xml)]);
$payLog->addInfo(['content'=>json_encode($data)]);
// 瀹炰緥鍖栬处鍗曟ā鍨
$OrderModel = new AppleOrder();
// 璐﹀崟淇℃伅
$orderInfo = $OrderModel->getInfo(['id'=>$data['attach']],'*');
if (empty($orderInfo)) {
$this->returnCode(50000001, '璐﹀崟涓嶅瓨鍦');
}
if($orderInfo['pay_status'] != 1 || !empty($orderInfo['pay_time'])){
$this->returnCode(50000001,'璁㈠崟宸叉敮浠桡纴璇峰嬁鍐嶆℃敮浠');
}
// 淇濆瓨寰淇℃湇锷″櫒杩斿洖镄勭惧悕sign
$dataSign = $data['sign'];
$return_code = $data['return_code'];
$result_code = $data['result_code'];
$data['body'] = '浼氩憳鍗';
$data['spbill_create_ip'] = \request()->ip();
$data['notify_url'] = $this->notify_url;
// sign 涓 s 鍙傛暟 涓嶅弬涓庣惧悕绠楁硶
unset($data['sign']);
unset($data['transaction_id']);
unset($data['coupon_id']);
unset($data['coupon_type']);
unset($data['coupon_count']);
unset($data['coupon_fee']);
unset($data['time_end']);
unset($data['return_code']);
unset($data['result_code']);
unset($data['is_subscribe']);
unset($data['fee_type']);
unset($data['bank_type']);
unset($data['bank_type']);
// 鐢熸垚绛惧悕
$sign = $this->makeSign($data);
// 鍒ゆ柇绛惧悕鏄钖︽g‘ 鍒ゆ柇鏀浠樼姸镐
if (($sign === $dataSign) && ($return_code == 'SUCCESS') && ($result_code == 'SUCCESS')) {
$OrderModel->startTrans();
try {
// 璐﹀崟鏀浠樻垚锷熶笟锷″勭悊
$appleOrderInfo = $OrderModel->where(['id'=>$orderInfo['id']])->lock(true)->find();
$result = $appleOrderInfo->addInfo(['pay_status'=>2,'pay_time'=>time()],['id'=>$orderInfo['id']]);
if(!$result){
$OrderModel->rollback();
$this->returnCode(5000003, '淇鏀硅㈠崟澶辫触锛屽け璐ュ师锲狅细'.$OrderModel->getError());
}
$appleUserModel = new AppleUser();
$appleUserInfo = $appleUserModel->where(['openid'=>$orderInfo['openid']])->lock(true)->find();
$appleUser = $appleUserInfo->where(['openid'=>$orderInfo['openid']])->setInc('moxibustion',$orderInfo['moxibustion']);
if(!$appleUser){
$OrderModel->rollback();
$this->returnCode(5000003, '娣诲姞浼氩憳阍堢伕娆℃暟澶辫触锛屽け璐ュ师锲狅细'.$appleUserModel->getError());
}
}catch (\Exception $exception){
$OrderModel->rollback();
$this->returnCode(5000003, '镎崭綔澶辫触锛屽け璐ュ师锲狅细'.$exception->getMessage());
}
$OrderModel->commit();
// 杩斿洖鐘舵
die(json(['code'=>0,'鏀浠樻垚锷']));
}
// 杩斿洖鐘舵
$this->returnCode(2000003, '绛惧悕澶辫触');
}
❼ 如何利用PHP语言开发平台第三方支付接口
第一步:签订合约通过第三方拿到接口(可以邮件形式发送、也可以在第三方系统下载),拿到接口后,要确认下接口类型,是否是自己需要的接口,比如B2C接口、B2B接口等类型。
第二步:支付接口分很多语言版本,比如ASP、JSP、PHP、.NET语言版本,所以要选择与自己网站语言匹配的接口进行安装。商城网站的技术一般比较清楚商城的开发语言。
第三步:拿到的支付接口一般包括接口文档和接口代码示例,选择合适的接口代码示例,进行联调,比如自己网站是PHP开发的,就选择PHP代码示例联调。
第四步:接口联调的时候,需要第三方支付提供联调测试账号,方可以联调。联调除了需要联调账号除外,还需要该账号的支付密钥,联调过程中,有什么问题,可以直接找第三方支付技术支持给予协调处理。
第五步:接口联调通过后,可先换成生产环境账号,进行交易测试,测试没问题后,可以放到商城网站进行交易。