'2.0', // 必填 版本号,ver 默认值是 1.0。目前版本 ver 取值应为 2.0
'charset' => 1, // 可选 1 UTF-8, 2 GB2312, 默认为 1 UTF-8
'bank_type' => 0, // 必填 银行类型:财付通支付填 0;目前只能为 0
'desc' => $order['order_sn'], // 必填 商品描述,32 个字符以内
'purchaser_id' => '', // 可选 用户(买方)的财付通帐户(QQ 或 EMAIL)。若商户没有传该参数则在财付通支付页面;买家需要输入其财付通帐户。
'bargainor_id' => $payment['tenpay_account'], // 必填 商户号,由财付通统一分配的 10 位正整数(120XXXXXXX)号
'sp_billno' => $order['order_sn'] . 'O' . $order['log_id'], // 必填 商户系统内部的定单号,32 个字符内、可包含字母
'total_fee' => $order['order_amount'] * 100, // 必填 总金额,以分为单位,不允许包含任何字母、符号
'fee_type' => 1, // 可选 现金支付币种,目前只支持人民币,默认值是 1-人民币
'notify_url' => notify_url(basename(__FILE__, '.php')), // 必填 接收财付通通知的 URL
'callback_url' => return_url(basename(__FILE__, '.php')), //必填 交易完成后跳转的 URL
// 'attach' => , // 可选 商户附加信息,可做扩展参数255 字符内
// 'time_start' => , // 可选 订单生成时间 格式为 yyyymmddhhmmss 如 2009 年 12 月 25日 9 点 10 分 10 秒表示为 20091225091010。时区为 GMT+8 beijing。该时间取自商户服务器
// 'time_expire' => , // 可选 订单失效时间 格式为 yyyymmddhhmmss 如 2009 年 12 月 27日 9 点 10 分 10 秒表示为 20091227091010。时区为 GMT+8beijing。该时间取自商户服务器
// 'sign' => , // 必填 MD5 签名结果,详见“第二章 MD5 签名规则”
);
// 字典排序
ksort($data);
reset($data);
// 生成签名
$sign = '';
foreach ($data as $key => $vo) {
if ($vo !== '') {
$sign .= $key . '=' . $vo . '&';
}
}
$sign .= 'key=' . $payment['tenpay_key'];
$data['sign'] = strtoupper(md5($sign));
// 交易初始化
$result = \libraries\Http::doPost($gateway, $data);
$xml = (array)simplexml_load_string($result);
if (isset($xml['err_info'])) {
return '错误信息:'.$xml['err_info'].''; }
/* 生成支付按钮 */
$button = '财付通支付';
return $button;
}
/**
* 同步通知
* @param $data
* @return mixed
*/
public function callback($data)
{
include_once(BASE_PATH.'helpers/payment_helper.php');
if (! empty($_GET)) {
$payment = get_payment($data['code']);
$record_data = I($_GET);
// 字典排序
ksort($record_data);
reset($record_data);
// 生成签名
$sign = '';
foreach ($record_data as $key => $vo) {
if ($vo !== '' && $key != 'sign') {
$sign .= $key . '=' . $vo . '&';
}
}
$sign .= 'key=' . $payment['tenpay_key'];
$sign = strtoupper(md5($sign));
// 验证签名
if ($sign != $record_data['sign']) {
return false;
}
// 订单号和支付log_id
$sp_billno = explode('O', $record_data['sp_billno']);
$log_id = $sp_billno[1];
if ($record_data['pay_result'] == 0) {
/* 改变订单状态 */
order_paid($log_id, 2);
return true;
} else {
return false;
}
}else{
return false;
}
}
/**
* 异步通知
* @param $data
* @return mixed
*/
public function notify($data)
{
include_once(BASE_PATH.'helpers/payment_helper.php');
if (! empty($_GET)) {
$payment = get_payment($data['code']);
$record_data = in($_GET);
// 字典排序
ksort($record_data);
reset($record_data);
// 生成签名
$sign = '';
foreach ($record_data as $key => $vo) {
if ($vo !== '' && $key != 'sign') {
$sign .= $key . '=' . $vo . '&';
}
}
$sign .= 'key=' . $payment['tenpay_key'];
$sign = strtoupper(md5($sign));
// 验证签名
if ($sign != $record_data['sign']) {
exit("fail");
}
// 交易状态
$pay_result = $record_data['pay_result'];
// 获取支付订单号log_id
$sp_billno = explode('O', $record_data['sp_billno']);
$log_id = $sp_billno[1]; // 订单号log_id
if ($pay_result == 0) {
/* 改变订单状态 */
order_paid($log_id, 2);
/*if(method_exists('WechatController', 'do_oauth')){
// 如果需要,微信通知 wanglu
$order_id = model('Base')->model->table('order_info')->field('order_id')->where('order_sn = "'.$sp_billno[0].'"')->getOne();
$order_url = __HOST__ . url('user/order_detail', array('order_id'=>$order_id));
$order_url = urlencode(base64_encode($order_url));
send_wechat_message('pay_remind', '', $sp_billno[0].' 订单已支付', $order_url, $sp_billno[0]);
}*/
exit("success");
} else {
exit("fail");
}
} else {
exit("fail");
}
}
/**
* 订单查询
* @return mixed
*/
public function query($order, $payment)
{
}
}