300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 字节跳动(今日头条)小程序支付 支付宝 微信支付完整版

字节跳动(今日头条)小程序支付 支付宝 微信支付完整版

时间:2019-04-30 08:05:50

相关推荐

字节跳动(今日头条)小程序支付 支付宝 微信支付完整版

字节跳动(今日头条)小程序支付

开通支付官方参数组装小程序代码服务端支付宝支付微信H5支付支付宝回调微信H5支付回调

开通支付

开通支付就不做说明了,请直接查看官方文档:/dev/cn/mini-app/develop/open-capacity/payment/mini-app-pay-plugin-reference/application-for-payment

官方参数组装

具体看文档:/dev/cn/mini-app/develop/open-capacity/payment/tt.pay

小程序代码

// 支付run_pay(){let service_val = 3; // 1 收银台 3 微信 4 支付宝qrxs.get_fetch('https://api.*****.com/pay/pay.html', {'fee':1800,'service':service_val ,'openid':'N2****Xu'}, function (data) {let orderInfo = data.data; if (data.status === "success") {tt.pay({orderInfo: orderInfo,service: service_val,getOrderStatus(res) {let {out_order_no } = res;return new Promise(function(resolve, reject) {// 商户前端根据 out_order_no 请求商户后端查询微信支付订单状态tt.request({url: "<your-backend-url>",success(res) {// 商户后端查询的微信支付状态,通知收银台支付结果resolve({code: 0 | 1 | 2 | 3 | 9 });},fail(err) {reject(err);}});});},success(res) {console.log(res)if (res.code == 0) {// 支付成功处理逻辑,只有res.code=0时,才表示支付成功// 但是最终状态要以商户后端结果为准}},fail(res) {console.log(res)// 调起收银台失败处理逻辑}});}})},

请求函数封装类

/*** 网络请求* @param options* @return {Promise}*/var get_fetch = function (url, data, backFun, method = 'GET') {let that = this;let headerJson = {"QRXS-FROM":'xcx'};tt.request({url: url,data: data,header: headerJson,method: method,success: function (ret) {try {// console.log(ret.data);backFun(ret.data);} catch (error) {console.log(error);}},fail: function (msg, code) {console.log(code);console.log(msg);},complete: function () {}})}

小程序代码就不做过多的说明了

服务端

/*** 今日头条小程序支付* @param array $data订单数据 body、 total_amount ,out_trade_no 必须要* @param string $openid 字节跳动的openid* @param int $service 1 拉起小程序收银台 3 微信支付 4 支付宝支付* @param int $payid后台支付商户命名,区分cps和自有* @return array*/function creParamToutiao($data=[],$openid='N2**aXu',$service=1){$body = isset($data['body']) ? $data['body'] : '订单说明';$total_amount = isset($data['total_amount']) ? $data['total_amount'] : 0; // 订单金额 分$out_trade_no = isset($data['out_trade_no']) ? $data['out_trade_no'] : '订单号';$now = time();$risk_info = get_client_ip(); //获取用户真实IP(我在这里写了一个获取IP的方法)$app_secret = 'u********xe'; //头条支付分配给业务方的支付秘钥$data = ["merchant_id" => "19*****42",// 头条支付分配给商户的商户号'app_id' => "8******2", // 头条支付分配给商户 app_id,用于获取加签秘钥信息。'sign_type' => "MD5", // 固定值:MD5。商户生成签名的算法类型"timestamp" => $now, // 发送请求的时间戳,精确到秒"version" => "2.0", // 固定值:2.0"trade_type" => "H5", // 固定值:H5"product_code" => "pay",// 固定值:pay"payment_type" => "direct", // 固定值:direct"currency" => "CNY",// 固定值: CNY。币种"total_amount" => $total_amount, // 金额,整型,单位:分(不能有小数)'out_order_no' => $out_trade_no, // 商户订单号"uid" => $openid, // 用户在商户侧唯一标志,长度:32 位"subject" => $body, // 商户订单名称;"body" => $body, // 商户订单详情"trade_time" => $now, // 下单时间戳,精确到秒"valid_time" => "300", // 订单有效时间(单位 秒)"notify_url" => "https://api.****.com/pay/pay.html", // 回调地址'wx_url' => '',// 调用微信 H5 支付统一下单接口 返回的 mweb_url 字段值(请注意不要进行 urlencode)。 service=3 时必传'wx_type' => '', // wx_url 非空时传 'MWEB'。wx_url 为空时,该字段不传'alipay_url' => '',// 调用支付宝 App 支付所需的支付请求参数 service=4 时必传];// 说明:service=3|4 时,merchant_id, app_id, sign_type, sign, wx_url, alipay_url, wx_type 字段值必须是真实信息;// 其他字段传非空、符合格式要求内容即可,不强制要求是真实订单信息if($service == 3){// 微信$wxDataArr = $this->cre_param_wxH5($total_amount,$body,$out_trade_no);$data["wx_url"] = isset($wxDataArr['mweb_url']) ? $wxDataArr['mweb_url'] : ''; // 调用微信 H5 支付统一下单接口 返回的 mweb_url 字段值(请注意不要进行 urlencode)。 service=3 时必传$data["wx_type"] = 'MWEB'; // wx_url 非空时传 'MWEB'。wx_url 为空时,该字段不传$data['notify_url'] = isset($wxDataArr['notify_url']) ? $wxDataArr['notify_url'] : '';}if($service == 4){// 支付宝$alipayArr = $this->cre_param_alipay($total_amount,$body,$out_trade_no);$alipayStr = isset($alipayArr['alipayStr']) ? $alipayArr['alipayStr'] : '';$data['notify_url'] = isset($alipayArr['notify_url']) ? $alipayArr['notify_url'] : '';$data["alipay_url"] = $alipayStr; // 调用支付宝 App 支付所需的支付请求参数 service=4 时必传}$data["sign"] = $this->getSignContent($data , $app_secret);//这里写了一个签名的方法$data["risk_info"] = json_encode(['ip' => $risk_info]); // // 支付风控参数。序列化后的 JSON 结构字符串,JSON 结构如下:{ip: '用户外网IP'}return $data;}/*** 字节跳动签名处理* @param $params* @param $charset* @return string*/public function getSignContent($params , $app_secret='', $charset='UTF-8') {ksort($params);$stringToBeSigned = "";$i = 0;foreach ($params as $k => $v) {if(!isset($v) || $v === null || trim($v) === "" || "@" == substr($v, 0, 1)){continue;}// 转换成目标字符集if (!empty($v)) {$fileType = "UTF-8";if (strcasecmp($fileType, $charset) != 0) {$v = mb_convert_encoding($v, $charset, $fileType);}}if ($i == 0) {$stringToBeSigned .= "$k" . "=" . "$v";} else {$stringToBeSigned .= "&" . "$k" . "=" . "$v";}$i++;}unset ($k, $v);return md5($stringToBeSigned.$app_secret);}

支付宝支付

/*** 支付宝支付* @param int $total_amount 订单金额(分)* @param string $body 订单说明* @param string $out_trade_no // 订单号 * @return array*/function cre_param_alipay($total_amount=0,$body='',$out_trade_no=''){// 进公帐 $version_path = 'qrxs_alipay_cert_new';$alipayconf = [ 'partner'=> '*****',//合作者身份id'app_id'=> '*****',//appid'seller_id' => '*****',//卖家账号];$notify_url = '/notify/alipay_new'; // 回调地址// 支付宝开始$total_fee_alip = $total_amount/100;$biz_content = ["timeout_express"=>"30m","product_code"=>"QUICK_MSECURITY_PAY","total_amount"=>"{$total_fee_alip}","subject"=>"{$body}","body"=>"{$body}","out_trade_no"=>"{$out_trade_no}",];$biz_content = json_encode($biz_content);$private_key_path = (getcwd()).'/'.$version_path . '/rsa_private_key.pem';$alipayParam = array('charset'=>'utf-8','biz_content'=>$biz_content,'method'=>'alipay.trade.app.pay',// 接口名称'notify_url'=>$this->notify_host.$notify_url,//支付完成通知地址'app_id'=>$alipayconf['app_id'],//合作者身份id'sign_type'=>'RSA2','version'=>'1.0','timestamp'=>date('Y-m-d H:i:s'),);$alipayStr = $this->getParamSign($alipayParam,$private_key_path);$backData = ['alipayStr'=>$alipayStr ,'notify_url' =>$alipayParam['notify_url'],];return $backData;}//支付宝参数签名private function getParamSign($params = array(),$private_key_path=''){$tempEncode = "";foreach ($params as $k => $v){$tempEncode .= $k . '=' . urlencode($v) . '&';}$tempEncode = substr($tempEncode, 0, strlen($tempEncode)-1);if(get_magic_quotes_gpc()){$tempEncode = stripslashes($tempEncode);}// 签名ksort($params);$temp = "";foreach ($params as $k => $v){$temp .= $k . '=' . $v . '&';}$temp = substr($temp, 0, strlen($temp)-1);if(get_magic_quotes_gpc()){$temp = stripslashes($temp);}//支付宝RSA签名$priKey = file_get_contents($private_key_path);$res = openssl_get_privatekey($priKey);openssl_sign($temp, $sign, $res,OPENSSL_ALGO_SHA256);openssl_free_key($res);$sign = base64_encode($sign); //base64编码return $tempEncode.'&sign='.urlencode($sign);}

微信H5支付

/*** 微信H5支付* @param int $total_amount* @param string $body* @param string $out_trade_no* @param int $payid* @return array*/function cre_param_wxH5($total_amount=0,$body='',$out_trade_no=''){//使用统一支付接口$notify_url = $this->notify_host."/Notify/wx_h5_own.html";include_once "Application/Vendor/WxPayH5/WxPayPubHelper.php";$unifiedOrder = new \UnifiedOrder_pub();$unifiedOrder->setParameter("body","{$body}");//商品描述//自定义订单号,此处仅作举例$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号//转分$unifiedOrder->setParameter("total_fee","$total_amount");//总金额$unifiedOrder->setParameter("notify_url",$notify_url);//通知地址$unifiedOrder->setParameter("trade_type","MWEB");//交易类型 调用接口提交的交易类型,取值如下:JSAPI,NATIVE,APP,,H5支付固定传MWEB$result = $unifiedOrder->getResult();$mweb_url = $result['mweb_url'];$prepayid = $result['prepay_id'];$data = array("mweb_url"=>$mweb_url,'prepayid'=>$prepayid,'out_trade_no'=>$out_trade_no,'notify_url'=>$notify_url,);return $data;}

支付回调就不写了,支付宝 和微信h5支付的回调应该都比较熟悉了,回调都是一样的

支付宝回调

//支付宝支付回调接口 3.1.0新账号 public function alipay_new(){$this->alipay_config = array('partner'=> '*****',//合作者身份id'private_key_path'=>(getcwd()).'/qrxs_alipay_cert_new/rsa_private_key.pem','ali_public_key_path'=>(getcwd()).'/qrxs_alipay_cert_new/alipay_public_key.pem','cacert' => (getcwd()).'/qrxs_alipay_cert_new/cacert.pem','sign_type' => '0001','input_charset' => 'utf-8','transport' => 'http','seller_id' => '*****',//卖家账号'notify_url' => '', // 回调域名);require_once LIB_PATH."/Event/alipay/alipay_notify_app.class.php";//计算得出通知验证结果$alipayNotify = new \AlipayNotify($this->alipay_config);$verify_result = $alipayNotify->verifyNotify();if($verify_result) {// 逻辑处理echo "success";} else {echo "fail";}}

支付宝回调引用类:/download/qq_23564667/12264188

微信H5支付回调

/** 微信h5 回调 cps* */public function wx_h5_cps(){//使用通用通知接口include_once "Application/Xcx4/Vendor/WxPayH5/WxPayPubHelper.php";$notify = new \Notify_pub();//存储微信的回调$xml = $GLOBALS['HTTP_RAW_POST_DATA'];$notify->saveData($xml);//验证签名,并回应微信。if($notify->checkSign() == FALSE){$notify->setReturnParameter("return_code","FAIL");//返回状态码$notify->setReturnParameter("return_msg","签名失败");//返回信息}else{$notify->setReturnParameter("return_code","SUCCESS");//设置返回码}//==商户根据实际情况设置相应的处理流程,此处仅作举例=======if($notify->checkSign() == TRUE){$out_trade_no = $notify->data["out_trade_no"];//订单号$trade_no = $notify->data["transaction_id"];//微信支付订单号$result_code = $notify->data["result_code"];//业务结果$bank_type = $notify->data["bank_type"];//付款银行$is_subscribe = $notify->data["is_subscribe"];//是否关注公众号$openid = $notify->data["openid"];///支付成功 业务逻辑操作echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';}echo '<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';}

微信回调引用类:/download/qq_23564667/12264153

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。