业务要求
顾客需要在应用程序、网站上接受微信结算支付
1.准备
前期准备营销人员参考微信、申请金融支付、特定流程申请付款文件的流程
2.配置
在前面的步骤中,在与da文件目录的con文件下配置了一些配置。具体代码如下:
配置
配置tp5配置页con文件,配置如下
?嗯?Php return [
//-
//应用设置
//-
//应用命名空间
App_namespace'='app '
//应用调试模式
App_debug'=false,
//应用跟踪
App_trace'=false,
//应用模式状态
App_status'=' '
//是否支持多个模块
App_multi_module'=true,
//门户自动绑定模块
Auto_bind_module'=false,
//已注册的根命名空间
Root_namespace'=[],
//扩展配置文件
Extra _ config _ list'=['database '' validate'],
//扩展函数文件
Extra _ file _ list'=[think _ path . '' helper 'ext]、
//预设输出类型
Default_return_type'='html '
//默认AJAX数据返回格式,可选JSON XML.
Default_ajax_return'='json '
//以默认JSONP格式返回的处理方法
default _ jsonp _ handler '=' jsonp return '
//默认JSONP处理方法
Var_jsonp_handler'='callback '
//默认时区
Default_timezone'='PRC '
//是否支持多语言
Lang_switch_on'=false,
//默认全局过滤方法是用逗号分隔多个
Default_filter'=' '
//默认语言
default _ lang '=' zh-cn '
//应用类库后缀
Class_suffix'=false,
//控制器类后缀
Controller_suffix'=false,
//|缓存设置//-
缓存'=[
//驱动方法
类型'='文件'
//缓存存储目录
Path'=CACHE_PATH,
//缓存前缀
Prefix'=' '
//缓存有效期0表示永久缓存
Expire'=0,],
//-
会话'=[
Id
#39; => '',// SESSION_ID的提交变量,解决flash上传跨域
'var_session_id' => '',
// SESSION 前缀
'prefix' => 'dspx',
// 驱动方式 支持redis memcache memcached
'type' => '',
// 是否自动开启 SESSION
'auto_start' => true, ],
// +---------------------------------------------------------------------- // | Cookie设置 // +----------------------------------------------------------------------
'cookie' => [
// cookie 名称前缀
'prefix' => '',
// cookie 保存时间
'expire' => 0,
//cookie 保存路径
'path' => '/',
// cookie 有效域名
'domain' => '',
// cookie 启用安全传输
'secure' => false,
// httponly设置
'httponly' => '',
// 是否使用 setcookie
'setcookie' => true, ],
'AUTH_CODE' => 'zheng_an',
//分页配置
'paginate' => [
'type' => 'bootstrap',
'var_page' => 'page',
'list_rows' => 15,
],
//设置项目域名
'domain'=> ';,
'speed_domain' =>';,
//微信开发平台支付相关配置设置
// 'OPEN_APPID'=>'jiade',
//微信开放平台的应用appid
// 'OPEN_MCHID'=>'jiade',
//商户号(注册商户平台时,发置注册邮箱的商户id)
// 'OPEN_KEY'=>'jiade',
//商户平台api支付处设置的key
'OPEN_APPID'=>'jiade',
'OPEN_MCHID'=>'jiade',
'OPEN_KEY'=>'jiade', // jiade
//微信公众平台支付相关配置设置
"KEY" => 'jiade',
//商户API 密钥
"APPID" => 'jiade',
//公众号appID
"SECRET" => 'jiade',
//公众号AppSecret
"MCHID" => 'jiade',//商户号id
//支付宝相关配置 'PRIVATEKEY' => '/g0Xro4NZLNpZxJBVaCeL7sGkCgYEA0pgBNt+7OOCLAVVRApHeJXiZXDeWjIoAu/RcBCYvldgYhdVJHTil3c7/73HVk9gLYkW9DFelJk5xYNwO4tYLRhwPiPK0dQUFaHgqJhwjLF6AnbFHy4FmbW3FaQahBezKfsAgkvXJDSc970HkjBMN3ajejUy8MCL6wR+xsB16adcCgYB5o6PnTWRYirWiFrKMOzNBaGTU9K3/sxji2sa7w+CSdx8X89beHH46K8IgBIvY/Y+H2r8tI0eO0XLrcetq+jtfSto4O/0P+5Z5ca4vP8YYr6ZVU8xj6aNE0t3U923o5RVCeinBNR6Yv6DVru7Dww62Yp+tGBYOK9hBJvjIItRdYQKBgDIRO3CtXliWYdXuT7U5ssPb2TIocR12jdghr2K5JWUNnD7tR1WwKxcB6K0ntixRF9vEUr7Fc5kY2zG4/70EQGfpsfPQKAEOMYv1zaeD1wTsbs2O4U/LsutfRqjCj7PV6QqbaOMnliYPZ1UjqE95FDnXtRmI3dDf8BfMDjWdvIW/AoGAYDBvoYQiBZej1+/cwOC2cioHhqIwz2V89wBMRi3XoTsyTKYYLDHqJBqu1BQNcyrNof1uX45zTDE0Zgsx6uksAYz/Udof/92rqJS7PEpDf2IWdzXiZJaMDDhgHi8CP2qP+K+n1s3cxnUR3OtGDQfyXCIQCiXE0CTPmgAnRPLeY5A=',
//商户应用私钥 'PUBLICKEY' => 'jiade',
//支付宝公钥 'ALIAPPID' => 'jiade',//支付宝APPID //
//微信开发平台支付相关配置设置
// 'OPEN_APPID'=>'jiade',
//微信开放平台的应用appid //
'OPEN_MCHID'=>'jiade',////商户号(注册商户平台时,发置注册邮箱的商户id)
// 'OPEN_KEY'=>'jiade',//商户平台api支付处设置的key ];
下单调用逻辑
<?php
/** * Created by PhpStorm. * User: ljy * Date: 17/10/14 * Time: 下午3:33 */
namespaceapp\api\controller;
usePingpp\Pingpp;
usePingpp\Charge;
require('../extend/Ping;);
usethink\request;
usethink\Db;
useWeChatPay\WeChatPay;
useWeChatPay\Notify;
include('../extend/alipay;);
class Pingxx extends Common {
/** *商城确认订单支付 */
publicfunction pay_order(){
// $data = $this->getPost();
// $arr = $this->XmlToArr($data);
$member = $this->checklogin(); //记录数据到日志中
$weChat = new WeChatPay();
$body = "商城订单";
$order_no=input('order_no');
$type = input('type');
$hotel_order = Db::name('order')->where(['order_no' => $order_no,'member_id'=>$member['member_id']])->find();
if (!$hotel_order) error("订单错误");
$total_fee = 1;
switch ($type) {
case'wx_pub_qr':
$Qurl = $weChat->wechat_getcode($order_no . "B" . time());
success($Qurl);
break;
case'wx':
$weChat->wechat_apppay($body, $order_no . "B" . time(), $total_fee);
break;
case'ali_app':
$aop = new \AopClient;
$aop->gatewayUrl = ";;
$aop->appId = config('ALIAPPID');
$aop->rsaPrivateKey = config('PRIVATEKEY');
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA2";
$aop->alipayrsaPublicKey = config('PUBLICKEY');
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:
ali$request = new \AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数
$out_trade_no = $order_no . "B" . time();
$bizcontent = "{\"body\":\"".$body."\"," . "\"subject\": \"AliApp\"," . "\"out_trade_no\": \"".$out_trade_no."\"," . "\"timeout_express\": \"30m\"," . "\"total_amount\": \"0.01\"," . "\"product_code\":\"QUICK_MSECURITY_PAY\"" . "}";
$request- >setNotifyUrl(";);
$request->setBizContent($bizcontent);
//这里和普通的接口调用不同,使用的是sdkExecute
$response = $aop->sdkExecute($request);
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题// echo htmlspecialchars($response);
//就是orderString 可以直接给客户端请求,无需再做处理。
$data = $response;
success($data);
break;
case'alipay_wap':
require_once ('../extend/alipaywap/con');
require_once ('../extend/alipaywap/pagepay/service;);
require_once ('../extend/alipaywap/pagepay/buildermodel;);
//商户订单号,商户网站订单系统中唯一订单号,必填//
$out_trade_no = trim($_POST['WIDout_trade_no']);
$out_trade_no = $order_no . "B" . time(); //订单名称,必填//
$subject = trim($_POST['WIDsubject']);
$subject = 'AliWap'; //付款金额,必填//
$total_amount = trim($_POST['WIDtotal_amount']);
$total_amount = '0.01'; //商品描述,可空//
$body = trim($_POST['WIDbody']);//构造参数
$payRequestBuilder = new \AlipayTradePagePayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$aop = new \AlipayTradeService($config);
/** * pagePay 电脑网站支付请求
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @param $return_url 同步跳转地址,公网可以访问
* @param $notify_url 异步通知地址,公网可以访问
* @return $response 支付宝返回的信息
*/
$response = $aop-
>pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);
//输出表单
var_dump($response);
break;
default:
# code...
break;
}