| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341 |
- <?php
- $payment_lang = array(
- 'name' => '通联微信支付',
- 'cusid' => '商户号(平台分配)',
- 'appid' =>'应用ID(平台分配)',
- 'key' => '密钥KEY(平台分配)',
-
- 'sub_appid' => '微信appid',
- 'sub_mchid' =>'微信子商户号',
- 'wxapp_key' => '微信密钥KEY',
- );
- $config = array(
- 'cusid' => array(
- 'INPUT_TYPE' => '0',
- ),
-
- 'appid' => array(
- 'INPUT_TYPE' => '0'
- ),
- 'key' => array(
- 'INPUT_TYPE' => '0'
- ),
- 'sub_appid' => array(
- 'INPUT_TYPE' => '0'
- ),
- 'sub_mchid' => array(
- 'INPUT_TYPE' => '0'
- ),
- 'wxapp_key' => array(
- 'INPUT_TYPE' => '0'
- )
- );
- /* 模块的基本信息 */
- if (isset($read_modules) && $read_modules == true)
- {
- $module['class_name'] = 'WxAllin';
- /* 名称 */
- $module['name'] = $payment_lang['name'];
- /* 支付方式:1:在线支付;0:线下支付 2:仅wap支付 3:仅app支付 4:兼容wap和app*/
- $module['online_pay'] = '3';
- /* 配送 */
- $module['config'] = $config;
-
- $module['lang'] = $payment_lang;
- $module['reg_url'] = '';
- return $module;
- }
- // 支付宝手机支付模型
- require_once(APP_ROOT_PATH.'system/libs/payment.php');
- class WxAllin_payment implements payment {
- public function get_payment_code($payment_notice_id)
- {
- $payment_notice = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."payment_notice where id = ".$payment_notice_id);
- //log_result("==payment_notice==");
- //log_result($payment_notice);
- //$order_sn = $GLOBALS['db']->getOne("select order_sn from ".DB_PREFIX."deal_order where id = ".$payment_notice['order_id']);
- $money = round($payment_notice['money'],2);
- $payment_info = $GLOBALS['db']->getRow("select id,config,logo from ".DB_PREFIX."payment where id=".intval($payment_notice['payment_id']));
- $payment_info['config'] = unserialize($payment_info['config']);
-
- $m_config = load_auto_cache("m_config");
- $title_name = $m_config['ticket_name'];
- if($title_name=='')
- $title_name = '虚拟印币';
-
- if(empty($title_name))
- {
- $title_name = "充值".round($payment_notice['money'],2)."元";
- }
-
- $pay['pay_info'] = $title_name;
- $pay['payment_name'] = "通联微信支付";
- $pay['pay_money'] = $money;
- $pay['pay_id'] = $payment_notice['id'];
- $pay['class_name'] = "WxAllin";
-
-
- //$subject = msubstr($title_name,0,40);
- $subject = $title_name;
- $data_notify_url = 'http://live.huangjiaxiuchang.com/callback/payment/wxallin_notify.php';
-
- require_once(APP_ROOT_PATH.'system/payment/Wxapp/WxPay.Api.php');
- require_once(APP_ROOT_PATH.'system/payment/Wxapp/WxPay.Notify.php');
- require_once(APP_ROOT_PATH.'system/payment/Wxapp/WxPay.Data.php');
-
-
- $nonce_str = WxPayApi::getNonceStr();
-
- $params = array();
- $params['cusid'] = $payment_info['config']['cusid'];//商户号 平台分配
- $params['appid'] = $payment_info['config']['appid'];//应用ID 平台分配的APPID
- $params['version'] = '11';//版本号 接口版本号 可 2 默认填11
-
- $params['trxamt'] = $payment_notice['money'] * 100;//交易金额 单位为分
- $params['reqsn'] = $payment_notice['id'];//商户交易单号 商户的交易订单号 否 32 商户平台唯一
-
- $params['paytype'] = 2;//交易方式 2:微信app支付
- $params['randomstr'] = $nonce_str;//rand(1000000000, 9000000000);//随机字符串 商户自行生成的随机字符串
-
- $params['body'] = $title_name;//订单标题 订单商品名称,为空则以商户名作为商品名称
-
- $params['validtime'] = 86400;//有效时间 订单有效时间,以分为单位,不填默认为15分钟
-
- $params['sub_appid'] = $payment_info['config']['sub_appid'];//微信appid 微信app支付必填, 开发者在微信开放平台申请 是
- ;
- $params['sub_mchid'] = $payment_info['config']['sub_mchid'];//微信子商户号 微信app支付必填,由通联平台分配 是
-
- //交易结果通知地址 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。 是 256 对于微信刷卡支付,该字段无效
- $params['notify_url'] = $data_notify_url;
-
- //指定支付方式 no_credit--指定不能使用信用卡支付 否 32 目前仅支持no_credit
- $params['limit_pay'] = 'no_credit';
-
-
- ksort($params);
- reset($params);
-
- $sign = '';
-
- foreach ($params as $key => $val) {
- $sign .= "$key=$val&";
- }
-
- $sign = substr($sign, 0, -1) . $payment_info['config']['key'];
- $sign_md5 = md5($sign);
-
- $params['sign'] = $sign_md5;
-
- //接口地址:https://vsp.allinpay.com/apiweb/weixin/pay
- //接入测试参数:
- /*
- 商户号:990581007426001
- APPID:00000051
- KEY:allinpay888
- URL: http://113.108.182.3:10080/apiweb/weixin
- */
-
- $url = 'http://113.108.182.3:10080/apiweb/weixin';
-
- //print_r($params);
-
- require_once(APP_ROOT_PATH.'system/utils/transport.php');
- $trans = new transport();
- $req = $trans->request($url,$params);
-
- print_r($req['body']);
-
- $ret = json_decode($req['body'],true);
-
- if ($ret['retcode'] == 'SUCCESS'){
- /*
- cusid 商户号 平台分配的商户号 否 15
- appid 应用ID 平台分配的APPID 否 8
- trxid 交易单号 平台的交易流水号 否 20
- chnltrxid 微信交易单号 微信平台的交易单号 是 50
- reqsn 商户交易单号 商户的交易订单号 否 32
- randomstr 随机字符串 随机生成的字符串 否 32
- trxstatus 交易状态 交易的状态,
- 对于微信刷卡支付,该状态表示实际的支付结果,其他为下单状态 否 4 详见3.1
- fintime 交易完成时间 yyyyMMddHHmmss 是 14 对于微信刷卡支付有效
- errmsg 错误原因 失败的原因说明 是 100
- weixinstr 微信支付串 App支付返回json串 是 不限 见第4章节示例
- sign 签名 否 32 详见1.5
-
-
- {"appid":"00000006","cusid":"XXXXXXXX","weixinstr":"{\"partnerId \":\"10000100\",\"timeStamp\":\"1477356696\",\"prepayId\":\"1101000000140415649af9fc314aa427\",\"package\":\"Sign=WXPay\",\"nonceStr\":\"38642\",\"sign\":\"66FF000B739F459D093FE24AB3462170\"}","reqsn":"1610258923119024","retcode":"SUCCESS","sign":"9513D3ABF5983F3FACCD8161931DB1ED","trxid":"180681592","trxstatus":"0000"}
- */
-
- $result = json_decode($ret['weixinstr'],true);
-
- $timestamp = get_gmtime();
-
-
- define('WXAPP_KEY',$payment_info['config']['wxapp_key']);
-
-
- //调起支付
- $wx_pay = new WxPayDataBase();
- $wx_pay->Set('appid',$payment_info['config']['sub_appid']);
- $wx_pay->Set('partnerid',$payment_info['config']['sub_mchid']);
- $wx_pay->Set('prepayid',$result['prepay_id']);//预支付交易会话ID
- $wx_pay->Set('package','prepay_id='.$result['prepay_id']);//android 写法
- $wx_pay->Set('noncestr',$nonce_str);//随机字符串
- $wx_pay->Set('timestamp',$timestamp);//时间戳
- $wx_pay->SetSign(false);//签名
-
- $pay['config'] = $wx_pay->GetValues();
-
- $wx_pay = new WxPayDataBase();
- $wx_pay->Set('appid',$payment_info['config']['sub_appid']);
- $wx_pay->Set('partnerid',$payment_info['config']['sub_mchid']);
- $wx_pay->Set('prepayid',$result['prepay_id']);//预支付交易会话ID
- $wx_pay->Set('package','Sign=Wxpay');//ios 写法
- $wx_pay->Set('noncestr',$nonce_str);//随机字符串
- $wx_pay->Set('timestamp',$timestamp);//时间戳
- $wx_pay->SetSign(false);//签名
-
- $pay['config']['ios'] = $wx_pay->GetValues();
-
- $pay['config']['packagevalue'] = 'prepay_id='.$result['prepay_id'];
- $pay['config']['subject'] = $subject;
- $pay['config']['body'] = $title_name;
- $pay['config']['total_fee'] = $money;
- $pay['config']['total_fee_format'] = format_price($money);
- $pay['config']['out_trade_no'] = $payment_notice['notice_sn'];
- $pay['config']['notify_url'] = $data_notify_url;
-
-
- //$pay['mch_id'] = $payment_info['config']['wxapp_partnerid'];
- //$pay['config']['key'] = $payment_info['config']['wxapp_key'];
- //$pay['config']['secret'] = $payment_info['config']['wxapp_secret'];
-
-
- if(isios())
- {
- $pay['sdk_code'] = array("pay_sdk_type"=>"wxpay","config"=>
- array(
- "appid"=>$payment_info['config']['sub_appid'],
- "partnerid"=>$payment_info['config']['sub_mchid'],
- "prepayid"=>$result['prepay_id'],
- "noncestr"=>$nonce_str,
- "timestamp"=>$timestamp,
- "package"=>"Sign=Wxpay",
- "sign" => $pay['config']['ios']['sign']
- )
- );
- }else{
- $pay['sdk_code'] = array("pay_sdk_type"=>"wxpay","config"=>
- array(
- "appid"=>$payment_info['config']['sub_appid'],
- "partnerid"=>$payment_info['config']['sub_mchid'],
- "prepayid"=>$result['prepay_id'],
- "noncestr"=>$nonce_str,
- "timestamp"=>$timestamp,
- "packagevalue"=>'prepay_id='.$result['prepay_id'],
- "sign"=>$pay['config']['sign']
- )
- );
- }
-
- $pay['ret'] = $ret;
- }else{
- //$ret['retmsg']
- $pay = $ret;
- }
-
-
- return $pay;
- }
-
- public function notify($request)
- {
- /*
- appid 平台分配的APPID
- outtrxid 收银宝平台流水号 通联系统内唯一
- trxcode 交易类型 见附录3.2
- trxid 通联交易流水号 通联系统内唯一
- trxamt 交易金额 分为单位
- trxdate 交易请求日期 yyyyMMdd
- paytime 交易完成时间 yyyyMMddHHmmss
- chnltrxid 微信交易单号 微信订单号
- trxstatus 交易状态 见3.1
- cusid 商户号
- termno 终端号
- termbatchid 终端批次号
- termtraceno 终端流水号
- termauthno 终端授权码
- termrefnum 终端参考号
- trxreserved 交易备注
- srctrxid 原交易ID 对于冲正、撤销、退货等交易时填写
- cusorderid 商户订单号
- acct 支付人帐号 微信支付的openid
- 如果信息为空,则默认填写000000
- sign 签名信息 详见1.5
- */
-
- $payment = $GLOBALS['db']->getRow("select id,config from ".DB_PREFIX."payment where class_name='WxAllin'");
- $payment['config'] = unserialize($payment['config']);
-
- /* 检查数字签名是否正确 */
- ksort($request);
- reset($request);
-
- foreach ($request AS $key=>$val)
- {
- if ($key != 'sign')
- {
- $sign .= "$key=$val&";
- }
- }
-
- $sign = substr($sign, 0, -1) . $payment['config']['key'];
-
- if (md5($sign) == $request['sign'])
- {
- if ($request['return_code'] == 'SUCCESS'){
- $payment_notice_sn = strim($request['cusorderid']);
- $outer_notice_sn = $request['outtrxid'];
-
- require_once APP_ROOT_PATH."system/libs/cart.php";
- $rs = payment_paid($payment_notice_sn,$outer_notice_sn);
- if ($rs)
- {
- echo "success";
- }else{
- echo "success";
- }
- }else{
- echo "fail";
- }
- }else{
- echo "fail";
- }
- }
- //响应通知
- function response($request)
- {}
-
- //获取接口的显示
- function get_display_code()
- {
- return "通联微信支付";
- }
-
- }
- ?>
|