PHP接入银联在线网关支付

网站支付:一般接入微信支付、支付宝支付、银联支付,本文介绍的是如何接入中国银联在线网关支付

银联介绍

银联在线支付网关是中国银联联合各商业银行为持卡人提供的集成化、综合性互联网支付工具,主要支持输入卡号付款、用户登录支付、网银支付、迷你付(IC卡支付)等多种支付方式,为持卡人提供境内外网上购物、水电煤缴费、商旅预订等支付服务。

具体流程如下图:

SDK&Demo下载

开放平台服务端SDK
下图为下载好的sdk

ps:官方给的demo都是php文件中写html,没有分离,网上找了各种资料,没有找到分离过后的demo,所以自己总结了demo,希望我的文章可以帮助到大家快速接入银联

异常应答说明

  1. 不返回报文体的情况:
    版本号,交易类型、子类,签名方法,签名值等关键域未上送,返回“Invalid request.”; 交易类型和请求地址校验有误,返回“Invalid request URI.”
  2. 返回全部的请求报文,附加应答码和应答描述(包括的应答码有:01、02、03、10、11、32):

验证签名失败;
报文格式错(包含,必填域缺失,上送银联报文未定义的域,报文域的格式非法,交易时间超出范围);
签名失败;
超时等其他系统异常

友情提示

中间如遇到问题:请登录商家后台进行人工咨询,什么qq客服已停用。
基本错误的话文档都会有介绍,如果不知道debug到了哪一步,客服会告诉你调用接口时返回的错误


登录步骤:开放平台在线咨询:https://open.unionpay.com/tjweb/index 用已有账号登录或者注册新用户登录,选择“普通用户”身份登录,登录后页面点击“前往商户测试中心”,界面上点击客服图标后,点击“确定登录”,再点击“商户咨询”进入咨询。
业务问题与生产问题请拨打4007795516电话咨询。

银联在线网关支付接口地址

https://open.unionpay.com/tjweb/api/dictionary?apiSvcId=448

修改公共参数配置

制作签名需要配置参数,由于sdk中用到的大部分是ini配置文件,所以我将部分配置信息放到了php的配置文件中,修改了原有的配置文件

下图要特别注意:消费和查询交易,三个值必须统一,则退款不需要

/sdk/SDKConfig.php文件

// __construct方法中的配置文件添加
$this->env = 'test';
$this->signCertPwd = '000000';
//如果想把acp_sdk.ini挪到其他路径的话,请修改下面这行指定绝对路径。
$configFilePath = dirname(__FILE__) . "/acp_sdk_test.ini";
if(env('APP_ENV') == 'production'){$this->env = 'prod';$this->signCertPwd = env('UNION_SIGN_CERT_PWD','000000');$configFilePath = dirname(__FILE__) . "/acp_sdk.ini";
}
// __construct方法中的配置文件修改
/** 重新定义配置文件路径   ---- 自定义$this->frontUrl =  array_key_exists("acpsdk.frontUrl", $sdk_array)?$sdk_array["acpsdk.frontUrl"]: null;$this->backUrl =  array_key_exists("acpsdk.backUrl", $sdk_array)?$sdk_array["acpsdk.backUrl"]: null;$this->signCertPath = array_key_exists("acpsdk.signCert.path", $sdk_array)?$sdk_array["acpsdk.signCert.path"]: null;$this->encryptCertPath = array_key_exists("acpsdk.encryptCert.path", $sdk_array)? $sdk_array["acpsdk.encryptCert.path"]: null;$this->rootCertPath = array_key_exists("acpsdk.rootCert.path", $sdk_array)? $sdk_array["acpsdk.rootCert.path"]: null;$this->middleCertPath =  array_key_exists("acpsdk.middleCert.path", $sdk_array)?$sdk_array["acpsdk.middleCert.path"]: null;$this->logFilePath =  array_key_exists("acpsdk.log.file.path", $sdk_array)?$sdk_array["acpsdk.log.file.path"]: null;$this->logLevel =  array_key_exists("acpsdk.log.level", $sdk_array)?$sdk_array["acpsdk.log.level"]: null;$this->signCertPwd = array_key_exists("acpsdk.signCert.pwd", $sdk_array)?$sdk_array["acpsdk.signCert.pwd"]: null;
*/
// 由于是laravel框架,所以放到了env中,也可以放到config中,其它框架放到配置文件中即可
$this->backUrl =  env('HOST_FAST').env('UNION_PAY_BACKURL','');
$this->frontUrl =  env('HOST_EDU').env('UNION_PAY_FRONTURL','/');
$this->signCertPath = dirname(dirname(dirname(__FILE__))).'/union_pay/assets/'.$this->env.'/acp_sign.pfx';
$this->encryptCertPath = dirname(dirname(dirname(__FILE__))).'/union_pay/assets/'.$this->env.'/acp_enc.cer';
$this->middleCertPath = dirname(dirname(dirname(__FILE__))).'/union_pay/assets/'.$this->env.'/acp_middle.cer';
$this->rootCertPath = dirname(dirname(dirname(__FILE__))).'/union_pay/assets/'.$this->env.'/acp_root.cer';
$this->logFilePath = storage_path(env("UNION_PAY_LOGFILE_PATH"));
$this->logLevel = env("UNION_PAY_LOG_LEVEL",null);

/sdk/acp_service.php文件

createAutoFormHtml方法 直接返回参数

static function createAutoFormHtml($params, $reqUrl) {return $params;
}

配置信息

.env文件

UNION_PAY_TEST_MERID=测试商户号
UNION_PAY_MERID=线上商户号
UNION_SIGN_CERT_PWD=线上商户号密码
UNION_PAY_BACKURL=
UNION_PAY_FRONTURL=
UNION_PAY_LOGFILE_PATH=logs/union_pay
UNION_PAY_LOG_LEVEL=DEBUG

控制器

  1. consume方法为给前端返回的所有配置信息
  2. union_validate是去验证支付参数是否正确(后台通知地址)
  3. queryTrans交易状态查询
  4. handle_result处理银联的回调
  5. union_refund退款

实战demo地址

https://github.com/WXiangQian/laravel-api

接入消费接口

<?phpnamespace App\Http\Controllers\Sys;use App\Http\Tools\Tools;
use com\unionpay\acp\sdk\AcpService;
use com\unionpay\acp\sdk\SDKConfig;
use Illuminate\Http\Request;class UnionPayController extends BasicController
{protected $merId;public function __construct(Request $request){header ( 'Content-type:text/html;charset=utf-8' );ini_set('date.timezone','Asia/Shanghai');include_once dirname(dirname(dirname(__FILE__))) . '/Tools/union_pay/sdk/acp_service.php';parent::__construct($request);$this->merId = env('UNION_PAY_TEST_MERID'); // 测试号if(env('APP_ENV') == 'production'){$this->merId = env('UNION_PAY_MERID');;}}/*** 银联消费的使用参数* @return \Illuminate\Http\JsonResponse* User: https://github.com/WXiangQian*/public function consume(){/*** 重要:联调测试时请仔细阅读注释!** 产品:跳转网关支付产品<br>* 交易:消费:前台跳转,有前台通知应答和后台通知应答<br>* 日期: 2015-09<br>* 版权: 中国银联<br>* 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>* 提示:该接口参考文档位置:open.unionpay.com帮助中心 下载  产品接口规范  《网关支付产品接口规范》,<br>*              《平台接入接口规范-第5部分-附录》(内包含应答码接口规范,全渠道平台银行名称-简码对照表)<br>*              《全渠道平台接入接口规范 第3部分 文件接口》(对账文件格式说明)<br>* 测试过程中的如果遇到疑问或问题您可以:1)优先在open平台中查找答案:* 							        调试过程中的问题或其他问题请在 https://open.unionpay.com/ajweb/help/faq/list 帮助中心 FAQ 搜索解决方案*                             测试过程中产生的7位应答码问题疑问请在https://open.unionpay.com/ajweb/help/respCode/respCodeList 输入应答码搜索解决方案*                          2) 咨询在线人工支持: open.unionpay.com注册一个用户并登陆在右上角点击“在线客服”,咨询人工QQ测试支持。* 交易说明:1)以后台通知或交易状态查询交易确定交易成功,前台通知不能作为判断成功的标准.*       2)交易状态查询交易(Form_6_5_Query)建议调用机制:前台类交易建议间隔(5分、10分、30分、60分、120分)发起交易查询,如果查询到结果成功,则不用再查询。(失败,处理中,查询不到订单均可能为中间状态)。也可以建议商户使用payTimeout(支付超时时间),过了这个时间点查询,得到的结果为最终结果。*/$channelType = $this->request->input('channelType','07');$merId = $this->merId;$riskRateInfo = $this->request->input('riskRateInfo','');$orderId = $this->request->input('orderId',0);$txnAmt = $this->request->input('txnAmt',1);$txnAmt = $txnAmt * 100;$txnTime = $this->request->input('txnTime',0);if ($txnTime == 0) {$txnTime = date('YmdHis');}// 在生产环境测试的时候,交易金额请勿小于1角。if(env('APP_ENV') == 'production' && $txnAmt <= 10){return $this->response->tag('PARAM_ERROR')->response();}// 查询数据库中的实际付款金额$order_txnAmt = AwsOrders::get_value_by_where(['oid'=>$orderId],'pay_amount');// 没有查到则定金异常if (!isset($order_txnAmt)) {return $this->response->tag('ORDER_NOT_EXIST')->response();}$order_txnAmt = $order_txnAmt * 100;// 不一样则认为恶意修改金额 返回错误if ($txnAmt != $order_txnAmt) {return $this->response->tag('ORDER_EXCEPTION')->response();}$params = array(//以下信息非特殊情况不需要改动'version' => SDKConfig::getSDKConfig()->version,                 //版本号'encoding' => 'utf-8',				  //编码方式'txnType' => '01',				      //交易类型'txnSubType' => '01',				  //交易子类'bizType' => '000201',				  //业务类型'frontUrl' =>  SDKConfig::getSDKConfig()->frontUrl.'?order_id='.$orderId,  //前台通知地址'backUrl' => SDKConfig::getSDKConfig()->backUrl.$txnTime,	  //后台通知地址'signMethod' => SDKConfig::getSDKConfig()->signMethod,	              //签名方法'channelType' => $channelType,	              //渠道类型,07-PC,08-手机'accessType' => '0',		          //接入类型'currencyCode' => '156',	          //交易币种,境内商户固定156//TODO 以下信息需要填写'merId' => $merId,		//商户代码,请改自己的测试商户号,此处默认取demo演示页面传递的参数'orderId' => $orderId,	//商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则'txnTime' => $txnTime,	//订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数'txnAmt' => $txnAmt,	//交易金额,单位分,此处默认取demo演示页面传递的参数// 订单超时时间。// 超过此时间后,除网银交易外,其他交易银联系统会拒绝受理,提示超时。 跳转银行网银交易如果超时后交易成功,会自动退款,大约5个工作日金额返还到持卡人账户。// 此时间建议取支付时的北京时间加15分钟。// 超过超时时间调查询接口应答origRespCode不是A6或者00的就可以判断为失败。'payTimeout' => date('YmdHis', strtotime('+15 minutes')),'riskRateInfo' =>'{commodityName='.$riskRateInfo.'}',// 请求方保留域,// 透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。// 出现部分特殊字符时可能影响解析,请按下面建议的方式填写:// 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。//    'reqReserved' =>'透传信息1|透传信息2|透传信息3',// 2. 内容可能出现&={}[]"'符号时:// 1) 如果需要对账文件里能显示,可将字符替换成全角&={}【】“‘字符(自己写代码,此处不演示);// 2) 如果对账文件没有显示要求,可做一下base64(如下)。//    注意控制数据长度,实际传输的数据长度不能超过1024位。//    查询、通知等接口解析时使用base64_decode解base64后再对数据做后续解析。//    'reqReserved' => base64_encode('任意格式的信息都可以'),//TODO 其他特殊用法请查看 special_use_purchase.php);AcpService::sign ( $params );$uri = SDKConfig::getSDKConfig()->frontTransUrl;$html_form = AcpService::createAutoFormHtml( $params, $uri );$data['url'] = $uri;foreach ($html_form as $key=>$value) {$data['data'][] = ['name'=>$key,'value'=>$value];}return $this->response->data($data)->response();}/*** 验证支付参数是否正确* @param $txnTime  订单发送时间* @return \Illuminate\Http\JsonResponse* User: https://github.com/WXiangQian*/public function union_validate($txnTime){if (isset ( $_POST ['signature'] )) {// 验签失败if (!AcpService::validate ($_POST)) {return $this->response->tag('PARAM_ERROR')->response();}$orderId = $_POST ['orderId']; //其他字段也可用类似方式获取$respCode = $_POST ['respCode'];//判断respCode=00、A6后,对涉及资金类的交易,请再发起查询接口查询,确定交易成功后更新数据库。if ($respCode == 00 || $respCode == 'A6') {// todo 将下单时间存到redis  key:order_id value:txnTime 查询交易的时候需要使用// todo 调用api项目的回调地址return $this->response->response();} else {return $this->response->tag('OPERATION_FAILED')->response();}}return $this->response->tag('PARAM_LACK')->response();}}

接入交易状态查询接口

/*** 交易状态查询* @param $channelType* @param $merId* @param $orderId* @param $txnTime* @return mixed* @throws LogicException* User: https://github.com/WXiangQian*/
public function queryTrans($channelType,$merId,$orderId,$txnTime)
{$params = array(//以下信息非特殊情况不需要改动'version' => SDKConfig::getSDKConfig()->version,		  //版本号'encoding' => 'utf-8',		  //编码方式'signMethod' => SDKConfig::getSDKConfig()->signMethod,		  //签名方法'txnType' => '00',		      //交易类型'txnSubType' => '00',		  //交易子类'bizType' => '000000',		  //业务类型'accessType' => '0',		  //接入类型'channelType' => $channelType,		  //渠道类型//TODO 以下信息需要填写'orderId' => $orderId,	//请修改被查询的交易的订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数'merId' => $merId,	    //商户代码,请改自己的测试商户号,此处默认取demo演示页面传递的参数'txnTime' => $txnTime,	//请修改被查询的交易的订单发送时间,格式为YYYYMMDDhhmmss,此处默认取demo演示页面传递的参数);AcpService::sign ( $params ); // 签名$url = SDKConfig::getSDKConfig()->singleQueryUrl;$result_arr = $this->handle_result($params,$url);return $result_arr;
}/*** 处理银联的回调* @param $params* @param $url* @throws LogicException* @return mixed* User: https://github.com/WXiangQian*/
public function handle_result($params,$url)
{$result_arr = AcpService::post ( $params, $url);if(count($result_arr)<=0) { //没收到200应答的情况throw new LogicException('REFUND_FAIL');}if (!AcpService::validate ($result_arr) ){throw new LogicException('CHECK_SIGN_FAIL');}if ($result_arr["respCode"] == "00"){//交易已受理,等待接收后台通知更新订单状态,如果通知长时间未收到也可发起交易状态查询//TODOreturn $result_arr;} else if ($result_arr["respCode"] == "03"|| $result_arr["respCode"] == "04"|| $result_arr["respCode"] == "05" ){//后续需发起交易状态查询交易确定交易状态//TODOthrow new LogicException('HADNLE_OVERTIME');} else {//其他应答码做以失败处理//TODOthrow new LogicException('失败:'.$result_arr["respMsg"],14004);}
}

接入退货接口

/*** 银联退款* @throws LogicException* @return \Illuminate\Http\JsonResponse* User: https://github.com/WXiangQian*/
public function union_refund()
{$channelType = $this->request->input('channelType','07');$merId = $this->merId;$oid = $this->request->input('orderId',0);$txnAmt = $this->request->input('txnAmt',1);$txnAmt2 = $txnAmt * 100;$txnTime = date('YmdHis');// todo 查询订单信息 判断订单是否存在$order_info =  ['plat_oid'=>11111111];$origQryId = $order_info['plat_oid'];$orderId = time().rand(1111, 9999); // 生成退款订单号/*** 重要:联调测试时请仔细阅读注释!** 产品:跳转网关支付产品<br>* 交易:退货交易:后台资金类交易,有同步应答和后台通知应答<br>* 日期: 2015-09<br>* 版权: 中国银联<br>* 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>* 该接口参考文档位置:open.unionpay.com帮助中心 下载  产品接口规范  《网关支付产品接口规范》<br>*              《平台接入接口规范-第5部分-附录》(内包含应答码接口规范,全渠道平台银行名称-简码对照表)<br>* 测试过程中的如果遇到疑问或问题您可以:1)优先在open平台中查找答案:* 							        调试过程中的问题或其他问题请在 https://open.unionpay.com/ajweb/help/faq/list 帮助中心 FAQ 搜索解决方案*                             测试过程中产生的7位应答码问题疑问请在https://open.unionpay.com/ajweb/help/respCode/respCodeList 输入应答码搜索解决方案*                          2) 咨询在线人工支持: open.unionpay.com注册一个用户并登陆在右上角点击“在线客服”,咨询人工QQ测试支持。* 交易说明: 1)以后台通知或交易状态查询交易(Form_6_5_Query)确定交易成功,建议发起查询交易的机制:可查询N次(不超过6次),每次时间间隔2N秒发起,即间隔1,2,4,8,16,32S查询(查询到03,04,05继续查询,否则终止查询)*        2)退货金额不超过总金额,可以进行多次退货*        3)退货能对11个月内的消费做(包括当清算日),支持部分退货或全额退货,到账时间较长,一般1-10个清算日(多数发卡行5天内,但工行可能会10天),所有银行都支持*/$params = array(//以下信息非特殊情况不需要改动'version' => SDKConfig::getSDKConfig()->version,		      //版本号'encoding' => 'utf-8',		      //编码方式'signMethod' => SDKConfig::getSDKConfig()->signMethod,		      //签名方法'txnType' => '04',		          //交易类型'txnSubType' => '00',		      //交易子类'bizType' => '000201',		      //业务类型'accessType' => '0',		      //接入类型'channelType' => $channelType,		      //渠道类型'backUrl' => 'http://www.specialUrl.com', //后台通知地址//TODO 以下信息需要填写'orderId' => $orderId,	    //商户订单号,8-32位数字字母,不能含“-”或“_”,可以自行定制规则,重新产生,不同于原消费,此处默认取demo演示页面传递的参数'merId' => $merId,	        //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数'origQryId' => $origQryId, //原消费的queryId,可以从查询接口或者通知接口中获取,此处默认取demo演示页面传递的参数'txnTime' => $txnTime,	    //订单发送时间,格式为YYYYMMDDhhmmss,重新产生,不同于原消费,此处默认取demo演示页面传递的参数'txnAmt' => $txnAmt2,       //交易金额,退货总金额需要小于等于原消费// 请求方保留域,// 透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。// 出现部分特殊字符时可能影响解析,请按下面建议的方式填写:// 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。//    'reqReserved' =>'透传信息1|透传信息2|透传信息3',// 2. 内容可能出现&={}[]"'符号时:// 1) 如果需要对账文件里能显示,可将字符替换成全角&={}【】“‘字符(自己写代码,此处不演示);// 2) 如果对账文件没有显示要求,可做一下base64(如下)。//    注意控制数据长度,实际传输的数据长度不能超过1024位。//    查询、通知等接口解析时使用base64_decode解base64后再对数据做后续解析。//    'reqReserved' => base64_encode('任意格式的信息都可以'),);AcpService::sign ( $params ); // 签名$url = SDKConfig::getSDKConfig()->backTransUrl;$this->handle_result($params,$url);// todo 退款成功-需要将退款信息存到自己的业务表中return $this->response->response();
}

测试环境测试银联支付

测试商户号为:777290058110048。测试环境只能使用银联给的银行卡信息:测试环境的测试卡信息

测试流程截图

注意事项

注:在生产环境测试的时候,交易金额请勿小于1角。

从测试配置切到线上配置时,线上必须修改UNION_SIGN_CERT_PWD线上商户号密码

遇到报错信息:The each() function is deprecated. This message will be suppressed on further calls

php7.2+已将each函数废除,则需要自己换为foreach

解决方案

// 在sdk/common.php中的createLinkString方法进行修改
//	while ( list ( $key, $value ) = each ( $para ) ) {
//		if ($encode) {
//			$value = urlencode ( $value );
//		}
//		$linkString .= $key . "=" . $value . "&";
//	}// php7.2后废弃eachforeach ($para as $key => $value) {if ($encode) {$value = urlencode ( $value );}$linkString .= $key . "=" . $value . "&";}

结束语

真枪实战php接入中国银联在线网关支付消费和交易状态查询以及银联退款接口。

掘金地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/52538.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动支付--银联,支付宝,微信(android)

在这个移动互联网高速发展的时代,手机已经成为人们生活或者出行之中不可缺少的设备了&#xff0c;现在很多城市的商户都可以采用支付宝&#xff0c;微信支付了&#xff0c;人们出门只需要随身携带带手机&#xff0c;不用带大量现金就可以放心购物了。现在的很多移动互联网产品都…

微信APP支付之IJpay的使用

写在开始:一个搬砖程序员的随缘记录微信支付相对其他支付&#xff0c;比如支付宝支付坑比较多。一直报签名失败。签名参数顺序、数据类型&#xff0c;加密类型这些都需要注意&#xff0c;用第三方的比较省心。 IJpay介绍&#xff1a; 聚合支付&#xff0c;IJPay 让支付触手可及…

滥用 GPT,被抓了.....

点击上方“Java基基”&#xff0c;选择“设为星标” 做积极的人&#xff0c;而不是积极废人&#xff01; 每天 14:00 更新文章&#xff0c;每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路&#xff0c;很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应…

沉浸式学习

沉浸式就是利用系统状态栏&#xff0c;将背景图片延伸至系统状态栏区域内&#xff0c;效果就是和游戏应用画面那样。 Action1 隐藏状态栏和ActionBar 仅仅是隐藏状态栏和ActionBar&#xff0c;只是粗暴的隐藏了而已 //获取当前界面的DecorViewView decorView getWindow().g…

最全整理反面角色谁更适合饰演老大角色,你认识多少?(已收藏)

https://www.toutiao.com/a6662589985889190412/ 2019-02-27 16:11:54 这些演艺界的大佬&#xff0c;哪位更适合饰演反面角色的老大&#xff0c;你觉得的呢&#xff1f; 排名不分前后 【万梓良】 香港娱乐圈内有很多自带大哥气质的演员&#xff0c;万梓良就是其中之一。 他在…

“引进来,走出去”,锦江国际集团多重创新力引领绿色新发展

2022年12月13日&#xff0c;由南方财经全媒体集团指导&#xff0c;21世纪经济报道主办的“21世纪住宿业高峰论坛&#xff08;2022&#xff09;暨2022&#xff08;第十九届&#xff09;【金枕头】酒店大赏发布典礼”在上海如期举行。锦江国际集团副总裁周维应邀出席并发表“创新…

PDF文档翻译中文的方法

1.如果你的文档容量不大&#xff0c;可以尝试使用谷歌翻译进行文档翻译&#xff0c;可以看到谷歌翻译支持的文档类型有 .doc、.docx、.odf、.pdf、.ppt、.pptx、.ps、.rtf、.txt、.xls 和 .xlsx 不过值得注意的是&#xff0c;谷歌翻译支持的文档容量仅为1MB 2.同样是基于谷歌…

如何将英文PDF翻译成中文且格式不变?(PDF免费翻译攻略)

如何将英文PDF翻译成中文且格式不变 方法1&#xff1a;转换成HTML后再使用谷歌浏览器翻译保存为PDF方法2&#xff1a;使用一些第三方PDF翻译网站最后博主采用了福昕翻译网站在线翻译的方法。 Hello&#xff0c;小伙伴们&#xff01; 博主最近想要将一份英文的pdf帮助文档转换成…

用python写一个PDF翻译软件

前期工作&#xff1a; 注册 百度翻译api的账户&#xff08;个人-高级版&#xff09;&#xff0c;注册后&#xff0c;每个月有2百万的免费翻译字符数。 安装pdfminer3k 一、UI界面设计 点击路径按钮时弹出文件目录选择窗口&#xff0c;参考文章&#xff1a; PYQT5实现文件目…

使用TCPDF插件生成pdf以及pdf的中文处理

做了这么多年项目&#xff0c;以前只是在别人的项目中了解过php生成pdf文件&#xff0c;知道并不难&#xff0c;但是涉及到了pdf开发库&#xff0c;首先介绍pdf库。 多种多样的pdf开发库 1.WKHTMLTOPDF wkhtmltopdf是一个很好的解决方案&#xff0c;基本上可以原样输出html页面…

pdf文件如何进行翻译?pdf文件翻译方法分享。

pdf文件如何进行翻译&#xff1f;在日常的工作和学习当中&#xff0c;很多小伙伴都需要接受到pdf文件&#xff0c;需要我们对pdf文件进行翻译或者处理&#xff0c;那么众所周知dpf文件因为不可编辑性&#xff0c;从而变的特别特别的安全&#xff0c;深受大家的喜爱&#xff0c;…

推荐几种可以直接翻译PDF英文文献的方法

大家在阅读英文文献的时候&#xff0c;可能会经常碰到这样的情况&#xff1a;由于作者使用了各种从句&#xff0c;明明只是一句话&#xff0c;却写成很长的一段&#xff0c;即使其中没有生词&#xff0c;看了几遍也弄不懂它的意思。如果句子里再夹杂了几个看不懂的英文单词&…

英文PDF怎么翻译成中文?两分钟让你学会翻译PDF

现在大部分的文件资料都是以PDF的格式保存的&#xff0c;这是因为PDF格式可以跨设备打开的时候&#xff0c;不会影响到内容的排版格式。在撰写论文的时候&#xff0c;我们常需要查阅各种文献资料&#xff0c;尤其是会参考英文文献。小伙伴们平时遇到不懂的词句&#xff0c;是怎…

pdf翻译器哪个好?这几个pdf翻译软件能支持一键翻译

有没有从事外贸行业的小伙伴经常收到国外客人发送的外文文档呢&#xff1f;通常这些文档除了是外文语言外&#xff0c;还是pdf格式的。外文不熟的朋友&#xff0c;肯定是对文档一窍不通吧。如果我们用一些pdf翻译器来翻译文档的话&#xff0c;我们就不用费心去研究该文档的意思…

推荐几个好用的pdf翻译工具

开始用的是网易有道词典&#xff0c;排版和准确度都不错&#xff0c;效果如下&#xff0c;只是收费 后来在网上找了一下&#xff0c;大部分工具&#xff0c;要不收费要不排版不行&#xff0c;或者只是划词翻译&#xff0c;也没有ocr识别 最后找了两个网站 https://fanyi.atm…

PDF如何翻译成中文?三种方法教你怎样翻译PDF上的文字

小伙伴们在学习或工作中遇到外国文章时是不是会先翻译成中文再阅读呢&#xff1f;如果文章是word或者txt格式&#xff0c;我们可以直接复制文字进行翻译。但是有些文章为了看起来美观可能会生成PDF格式&#xff0c;我们想翻译的话&#xff0c;就需要先把格式转换成word等方便编…

PDF怎么翻译成中文?这些方法值得收藏

小伙伴们平时接触英文PDF文件的机会多吗&#xff1f;虽然可能平时接触的少&#xff0c;可是一旦接触就会很痛苦&#xff0c;因为有的PDF文件里面会充斥着大量深奥的词汇。对于这些深奥的词汇&#xff0c;小伙伴们都是采取什么方法呢&#xff1f;是逐个逐个拿去翻译吗&#xff1…

福昕pdf阅读器的划词翻译功能如何添加(图文并茂)

一、打开福昕阅读器 二、可在上方工具栏&#xff0c;点击“帮助”&#xff0c;关于福昕阅读器领鲜版查看安装的版本信息&#xff0c;如图1-1&#xff0c;图1-2 图1-1 图1-2 三、找到上方工具栏的图标按键&#xff0c;名为“自定义快速访问工具栏”&#xff0c;如图1-3&#…

怎么把PDF翻译成中文?教你便捷翻译方法

怎么把PDF文件的内容给翻译成中文呢&#xff1f;对于PDF文件&#xff0c;大家在日常中经常会使用到&#xff0c;在办公中收到一份英文的PDF文件&#xff0c;或者是我们在网站上下载资料&#xff0c;发现是看不懂的英文&#xff0c;这时候我们怎么将文件内容给翻译成中文呢&…

我进入银行科技部半年,已经丧失跳槽的能力了!

大家好&#xff0c;我是小猿 学弟分享 我是一个杭州双非的本科生&#xff0c;2022届毕业之后进了某银行的科技部工作&#xff0c;年包 20w。 当时想着在银行也算是一份安稳的工作&#xff0c;因此选择了给钱最多的一个&#xff0c;想着自己走上了金融 科技的赛道。 在去之前也…