VPS参考测评推荐
专注分享VPS主机优惠信息
衡天云优惠活动
华纳云优惠活动

重新编写打包百度支付(百度智能小程序支付)

主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情!
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作

因为最近项目重建,百度支付被重新编写封装。这次重写增加了签名处理和用户退款,方便后期开发。

因为百度电商开放平台的升级,支付功能搬到了智能小程序上。具体申请流程:百度收银支付开通指南,(https://smart program . Baidu . com/docs/operations/transform/pay/)

(注:支付业务中,服务电话应填写银行预留手机号码。如果报错[银行预留手机号格式验证失败])

百度支付文档:百度收银接口2.0(https://smartprogram.baidu.com/docs/develop/function/tune _ up _ 2.0/)

一、申请通过后,填写百度支付相关配置:

$ config = array( # 39;deal _ id # 39= gt''、//百度收银的财务结算凭证 # 39;app _ key # 39= gt'',//代表应用程序身份的唯一 # 39private _ key # 39= gt'',//私钥的原始字符串 # 39;public _ key # 39= gt'',//平台公钥 # 39;notify _ url # 39= gt'',//支付回拨地址);第二,调用封装好的支付方法,将返回的信息传递给百度小程序。

lt马鞭phpinclude # 39。/Baidu pay . PHP # 39;;$ Baidu pay = new \ feng \ Baidu pay($ config);$order_sn = time()。兰特(10009999);$ order = array( # 39;正文 # 39;= gt'测试商品 # 39;,//产品描述 # 39;total _ amount # 39= gt'1',//订单金额(积分) # 39;order _ sn # 39= gt$order_sn,//订单号);$re = $baidupay->xcx pay($ order);die(JSON _ encode($ re));// JSON直接返回applet客户端PHP applet支付类xcxPay:

/** * [xcxPay百度小程序支付]* @ param[type]$ order[订单信息数组]* @ return[type][description]* $ order = array(* # 39;正文 # 39;= gt'',//产品描述* # 39;total _ amount # 39= gt'',//订单金额(积分)* # 39;order _ sn # 39= gt'',//订单号*);*/公共静态函数xcxPay($order){ if(!is _ array($ order)| | count($ order) lt;3)模具( 缺少数组数据信息!");$ config = self::$ config;$ requestParamsArr = array( # 39;appKey # 39= gt$ config[ # 39;app _ key # 39], 'dealId # 39= gt$ config[ # 39;deal _ id # 39], 'tpOrderId # 39= gt$ order[ # 39;order _ sn # 39], '总金额 # 39;= gt$ order[ # 39;total _ amount # 39], );$ RSA sign = self::makeSign($ requestParamsArr,$ config[ # 39;private _ key # 39]);//认领百度的支付签名$ bizInfo = array( # 39;tpData # 39= gt数组( appKey = gt$ config[ # 39;app _ key # 39], dealId = gt$ config[ # 39;deal _ id # 39], tpOrderId = gt$ order[ # 39;order _ sn # 39], rsaSign = gt$rsaSign, 总金额 = gt$ order[ # 39;total _ amount # 39], returnData = gt'', 显示数据= gt数组( cashierTopBlock = gtarray(数组([ ;leftCol= gt"订单名称", 右栏 = gt$ order[ # 39;正文 # 39;] ],[ ;leftCol= gt"数量", 右栏 = gt"1 ],[ ;leftCol= gt"订单金额", 右栏 = gt$ order[ # 39;total _ amount # 39] ])、数组([ ;leftCol= gt"地址", 右栏 = gt"北京市海淀区上地十街10号百度大厦],[ ;leftCol= gt"服务", 右栏 = gt"2018/10/29 14:51 ;],[ ;leftCol= gt"服务", 右栏 = gt"百度App ]))), ;交易标题 = gt$ order[ # 39;正文 # 39;], dealSubTitle = gt$ order[ # 39;正文 # 39;], dealThumbView = gt"https://b . BD static . com/search box/icms/search box/img/swan -logo . png ;,), orderDetailData = gt'');$ b order = array( # 39;dealId # 39= gt$ config[ # 39;deal _ id # 39], 'appKey # 39= gt$ config[ # 39;app _ key # 39], '总金额 # 39;= gt$ order[ # 39;total _ amount # 39], 'tpOrderId # 39= gt$ order[ # 39;order _ sn # 39], 'dealTitle # 39= gt$ order[ # 39;正文 # 39;], 'signFieldsRange # 39= gt1, 'rsaSign # 39= gt$rsaSign, # 39;bizInfo # 39= gtjson_encode($bizInfo),);返回$ bdOrder}三、百度智能小程序的使用

天鹅

ltview class = wrap gt ltview class = card -区域 gt lt按钮绑定:tap = requestPolymerPayment type = 主要 悬停-停止-传播= true gt支付0.01元</button gt; lt/view gt; lt/view gt;HTMLJS

page({ requestPolymerPayment(e){ swan . request({ URL: # 39;https://mbd.baidu.com/xxx',//这只是一个例子,不是真正的接口地址。开发者从真实接口success中获取orderInfo的值:RES = >;{ RES . data . data . deal title = # 39;百度小程序演示支付测试 # 39;;设data = res.dataif (data.errno!= = 0){ console . log( # 39;创建订单错误 # 39;,数据);返回;} swan . requestpolymerpayment({ order info:data . data,success:RES = gt;{ swan . show toast({ title: # 39;支付成功 # 39;,图标: # 39;成功 # 39;});console . log( # 39;支付成功 # 39;,RES);},失败:err = gt{ swan . show toast({ title:err . errmsg,icon: # 39;无 # 39;});console . log( # 39;支付失败 # 39;,err);} });},失败:err = gt{ swan . show toast({ title: # 39;订单创建失败 # 39;,图标: # 39;无 # 39;});console . log( # 39;创建订单失败 # 39;,err);} });}});四。支付回拨

lt马鞭phpinclude # 39。/Baidu pay . PHP # 39;;$ Baidu pay = new \ feng \ Baidu pay($ config);$re = $baidupay->notify();If ($re) {//这里回调订单处理操作//验证支付成功后返回的信息,可以直接操作订单。微信已通知$ baidupay->支付成功;success();//支付返回成功,结果通知} else {//支付失败$ Baidu pay ->;错误();//如果支付失败,返回状态(支付成功与否需要通知百度)}百度完整的支付类(BaiduPay.php)包括小程序支付、签核、回拨、退款:

lt马鞭PHP/* * * * @作者:[冯]* @日期:2020-09-27t 16:28:3zhujicankao08:00 * @最后修改人:[冯]* @最后修改时间:2020-10-15t 10:23:07+08:00 */命名空间冯;class Baidu pay { private static $ config = array( # 39;deal _ id # 39= gt''、//百度收银的财务结算凭证 # 39;app _ key # 39= gt'',//代表应用程序身份的唯一 # 39private _ key # 39= gt'',//私钥的原始字符串 # 39;public _ key # 39= gt'',//平台公钥 # 39;notify _ url # 39= gt'',//支付回拨地址);/* * *[_ _ construct constructor]* @ param[type]$ config[转移支付相关配置]*/public function _ _ construct($ config = null){ $ config ;self::$ config = $ config;} /** * [xcxPay百度小程序支付]* @ param[type]$ order[订单信息数组]* @ return[type][description]* $ order = array(* # 39;正文 # 39;= gt'',//产品描述* # 39;total _ amount # 39= gt'',//订单金额(积分)* # 39;order _ sn # 39= gt'',//订单号*);*/公共静态函数xcxPay($order) { if(!is _ array($ order)| | count($ order) lt;3)模具( 缺少数组数据信息!");$ config = self::$ config;$ requestParamsArr = array( # 39;appKey # 39= gt$ config[ # 39;app _ key # 39], 'dealId # 39= gt$ config[ # 39;deal _ id # 39], 'tpOrderId # 39= gt$ order[ # 39;order _ sn # 39], '总金额 # 39;= gt$ order[ # 39;total _ amount # 39], );$ RSA sign = self::makeSign($ requestParamsArr,$ config[ # 39;private _ key # 39]);//认领百度的支付签名$ bizInfo = array( # 39;tpData # 39= gt数组( appKey = gt$ config[ # 39;app _ key # 39], dealId = gt$ config[ # 39;deal _ id # 39], tpOrderId = gt$ order[ # 39;order _ sn # 39], rsaSign = gt$rsaSign, 总金额 = gt$ order[ # 39;total _ amount # 39], returnData = gt'', 显示数据= gt数组( cashierTopBlock = gtarray(数组([ ;leftCol= gt"订单名称", 右栏 = gt$ order[ # 39;正文 # 39;] ],[ ;leftCol= gt"数量", 右栏 = gt"1 ],[ ;leftCol= gt"订单金额", 右栏 = gt$ order[ # 39;total _ amount # 39] ])、数组([ ;leftCol= gt"地址", 右栏 = gt"北京市海淀区上地十街10号百度大厦],[ ;leftCol= gt"服务", 右栏 = gt"2018/10/29 14:51 ;],[ ;leftCol= gt"服务", 右栏 = gt"百度App ]))), ;交易标题 = gt$ order[ # 39;正文 # 39;], dealSubTitle = gt$ order[ # 39;正文 # 39;], dealThumbView = gt"https://b . BD static . com/search box/icms/search box/img/swan -logo . png ;,), orderDetailData = gt'');$ b order = array( # 39;dealId # 39= gt$ config[ # 39;deal _ id # 39], 'appKey # 39= gt$ config[ # 39;app _ key # 39], '总金额 # 39;= gt$ order[ # 39;total _ amount # 39], 'tpOrderId # 39= gt$ order[ # 39;order _ sn # 39], 'dealTitle # 39= gt$ order[ # 39;正文 # 39;], 'signFieldsRange # 39= gt1, 'rsaSign # 39= gt$rsaSign, # 39;bizInfo # 39= gtjson_encode($bizInfo),);返回$ bdOrder}/* * *[退款百度支付退款]* @ param[type]$ order[订单信息]* @ param[type]$ type[退款类型]* $ order = array(* # 39;正文 # 39;= gt'',//退款原因* # 39;total _ amount # 39= gt'',//退款金额(积分)* # 39;order _ sn # 39= gt'',//订单号* '访问令牌 # 39;= gt'',//获取开发者服务权限描述* # 39;order _ id # 39= gt'',//百度收银订单ID * # 39user _ id # 39= gt'',//百度收银用户id *);*/公共静态函数退款($order=[],$ type = 1){ $ config = self::$ config;$ data = array( # 39;访问令牌 # 39;= gt$ order[ # 39;访问令牌 # 39;],//获取开发者服务权限描述 # 39;applyRefundMoney # 39= gt$ order[ # 39;total _ amount # 39],//退款金额分钟。'bizRefundBatchId # 39= gt$ order[ # 39;order _ sn # 39],//开发商退款批量 # 39;isSkipAudit # 39= gt1.//是否跳过审批,如果百度不需要向开发者要求退款审批,请通过1。默认值为0;0:不跳过开发者业务端的审核;1:跳过开发者业务审计。'订单编号 # 39;= gt$ order[ # 39;order _ id # 39],//百度收银订单ID # 39退款理由 # 39;= gt$ order[ # 39;正文 # 39;],//退款原因 # 39;退款类型 # 39;= gt$type,//退款类型1:用户发起退款;2:开发商业务方客服退款;3:开发者服务异常退款。'tpOrderId # 39= gt$ order[ # 39;order _ sn # 39],//开发者订单ID # 39userId # 39= gt$ order[ # 39;user _ id # 39],//百度收银用户id);$ array =[ # 39;errno # 39= gt0, 'msg # 39= gt'成功 # 39;, '数据 # 39;= gt['isConsumed # 39= gt2] ];$ url = # 39https://open API . Baidu . com/rest/2.0/smart app/pay/paymentservice/applyOrderRefund # 39;;$response = self::post_curl($url,$ data);$result = json_decode($response,true);////显示错误消息//if($result[ # 39;msg # 39]!='成功 # 39;){ //返回false////die($result[ # 39;msg # 39]);// }返回$ result}/* * *[通知回调验证]* @ return[array][以数组格式返回通知数据]*/公共静态函数notify(){ $ data = $ _ post;//Get XML $ config = self::$ config;如果(!$ data | | empty($ data[ # 39;rsaSign # 39]))死( # 39;还没有回拨信息 # 39;);$result = self::checkSign($data,$ config[ # 39;public _ key # 39]);//验证签名//判断签名是否正确。判断付款状态,如果(result $ data[ # 39;地位 # 39;]= = 2){ return $ data;} else {返回false} }/* * *[成功通知支付状态]*/公共静态函数success(){ $ array =[ # 39;errno # 39= gt0, 'msg # 39= gt'成功 # 39;, '数据 # 39;= gt['isConsumed # 39= gt2] ];die(JSON _ encode($ array));}/* * *[错误通知支付状态]*/公共静态函数error(){ $ array =[ # 39;errno # 39= gt0, 'msg # 39= gt'成功 # 39;, '数据 # 39;= gt['iserrorrorder # 39;= gt1, 'isConsumed # 39= gt2] ];die(JSON _ encode($ array));} /** * [makeSign使用私钥生成签名字符串]* @ param array $ assocar[into parameter group]* @ param[type]$ rsaPriKeyStr[私钥原始字符串,不含PEM格式前缀和后缀]* @ return[type][签名结果字符串] */public静态函数设计(array $ assocar,$ rsaPriKeyStr){ $ sign = # 39;';if(empty($ rsaPriKeyStr)| | empty($ assocar)){ return $ sign;}如果(!function _ exists( # 39;openssl _ pkey _ get _ private # 39) || !function _ exists( # 39;openssl _ sign # 39)){抛出新异常( Openssl扩展不存在”);} $ rsaPriKeyPem = self::convertrsakeystr 2 PEM($ rsaPriKeyStr,1);$ priKey = OpenSSL _ pkey _ get _ private($ rsaPriKeyPem);if(isset($ asso carr[ # 39;标志 # 39;]){ unset($ asso carr[ # 39;标志 # 39;]);} ksort($ asso carr);//参数按照字典顺序$parts = array()排序;foreach($ asso carr as $ k = gt;$ v){ $ parts[]= $ k . # 39;='。$ v;} $str =内爆( # 39; ',$ parts);openssl_sign($str,$sign,$ priKey);OpenSSL _ free _ key($ priKey);返回base64 _ encode($ sign);} /** * [checkSign使用公钥验证签名]* @ param array $ asso carr[根据输入参数,签名属性名固定为r sign]* @ param[type]$ rsapubkeystr[公钥的原始字符串,不带PEM格式的前缀和后缀]* @ return[type][check pass | false check fail]*/公共静态函数check sign (array $ assocarr,$ rsapubkeystr) {if(!isset($ asso carr[ # 39;rsaSign # 39])| | empty($ assocar)| | empty($ rsaPubKeyStr)){ return false;}如果(!function _ exists( # 39;openssl _ pkey _ get _ public # 39) || !function _ exists( # 39;openssl _ verify # 39)){抛出新异常( Openssl扩展不存在”);} $ sign = $ asso carr[ # 39;rsaSign # 39];unset($ asso carr[ # 39;rsaSign # 39]);if(empty($ assocar)){返回false} ksort($ asso carr);//参数按照字典顺序$parts = array()排序;foreach($ asso carr as $ k = gt;$ v){ $ parts[]= $ k . # 39;='。$ v;} $str =内爆( # 39; ',$ parts);$ sign = base64 _ decode($ sign);$ rsaPubKeyPem = self::convertrsakeystr 2 PEM($ rsaPubKeyStr);$ pubKey = OpenSSL _ pkey _ get _ public($ rsaPubKeyPem);$ result =(bool)OpenSSL _ verify($ str,$sign,$ pubKey);OpenSSL _ free _ key($ pubKey);返回$ result} /** * [convertRSAKeyStr2Pem将密钥从字符串(不换行)转换为Pem格式]* @ param[type]$ rsaKeyStr[原始密钥字符串] * @param integer $keyType [0公钥|1私钥,0] default * @ return [type] [PEM格式密钥]*/公共静态函数convertrsakeystr 2 PEM($ RSA keystr,$ key type = 0){ $ PEM width = 64;$ rsaKeyPem = # 39';$ begin = # 39-----BEGIN # 39;;$ end = # 39-----END # 39;;$ key = # 39key ----- # 39;;$type = $keyType?'RSA PRIVATE # 39: 'PUBLIC # 39;$keyPrefix = $begin。$type。$ key$keySuffix = $end。$type。$ key$rsaKeyPem。= $keyPrefix。"\ n ;$rsaKeyPem。= wordwrap($rsaKeyStr,$pemWidth, \ n ,真)。"\ n ;$rsaKeyPem。= $ keySuffix如果(!function _ exists( # 39;openssl _ pkey _ get _ public # 39) || !function _ exists( # 39;openssl _ pkey _ get _ private # 39)){返回false} if($ key type = = 0 ; false = = OpenSSL _ pkey _ get _ public($ rsaKeyPem)){ return false;} if($ key type = = 1 ; false = = OpenSSL _ pkey _ get _ private($ rsaKeyPem)){ return false;}返回$ rsaKeyPem} /** * curl post请求* @param string $url地址* @param string $postData数据* @param array $header头* @ return bool | string * @ Date 2020/9/17 17:12 * @ Author wzb */public静态函数post _ curl($ URL = # 39;',$ postData = # 39',$ header =[]){ $ ch = curl _ init($ URL);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch,CURLOPT_HEADER,false);curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5000);curl_setopt($ch,CURLOPT_TIMEOUT,5000);if($header){ curl_setopt($ch,CURLOPT_HTTPHEADER,$ header);} curl_setopt($ch,CURLOPT_POSTFIELDS,$ post data);$ result = curl _ exec($ ch);$httpCode = curl_getinfo($ch,curl info _ HTTP _ CODE);$ curlErrNo = curl _ errno($ ch);$ curlErr = curl _ error($ ch);curl _ close($ ch);返回$ result}}以上是对百度支付(百度智能小程序支付)进行改写和打包的详细内容。请多关注主机参考其他相关文章!

这几篇文章你可能也喜欢:

本文由主机参考刊发,转载请注明:重新编写打包百度支付(百度智能小程序支付) https://zhujicankao.com/77958.html

【腾讯云】领8888元采购礼包,抢爆款云服务器 每月 9元起,个人开发者加享折上折!
打赏
转载请注明原文链接:主机参考 » 重新编写打包百度支付(百度智能小程序支付)
主机参考仅做资料收集,不对商家任何信息及交易做信用担保,购买前请注意风险,有交易纠纷请自行解决!请查阅:特别声明

评论 抢沙发

评论前必须登录!