import requests import json from common.esigntool.esign_config import Config from common.esigntool.esign_algorithm import buildSignJsonHeader import time from datetime import datetime config = Config() def get_auth_flow_id(org_name, org_id, legal_rep_name, legal_rep_id): """获取机构认证&授权页面链接""" api_path = "/v3/org-auth-url" method = "POST" body = { "clientType": "ALL", "redirectConfig": { "redirectUrl": "https://www.baidu.com" }, "orgAuthConfig": { # "orgName": "爱丽恩严(大连)商务科技有限公司深圳分公司", "orgName": org_name, "orgInfo": { # "orgIDCardNum": "91440300MADDW7XC4C", "orgIDCardNum": org_id, "orgIDCardType": "CRED_ORG_USCC", # "legalRepName": "彭少荣", "legalRepName": legal_rep_name, # "legalRepIDCardNum": "362204198807182420", "legalRepIDCardNum": legal_rep_id, "legalRepIDCardType": "CRED_PSN_CH_IDCARD" }, "transactorInfo": { "psnAccount": "17337039317", "psnInfo": { "psnName": "孟骞康", "psnIDCardNum": "411426200308121212", "psnIDCardType": "CRED_PSN_CH_IDCARD", "psnMobile": "17337039317" } } }, # "authorizeConfig": { # "authorizedScopes": [ # "get_org_identity_info", # "get_psn_identity_info", # "org_initiate_sign", # "manage_org_resource" # ] # }, "notifyUrl": "http://120.26.186.130:33333/api/store/esign/callback_auth", "transactorUseSeal": True } json_headers = buildSignJsonHeader(config.appId, config.scert, method, api_path, body=body) body_json = json.dumps(body, separators=(",", ":"), ensure_ascii=False) resp = requests.request(method, config.host + api_path, data=body_json, headers=json_headers) print(resp.text) return resp.text # get_auth_flow_id() def get_template_detail(): """查询合同模板中控件详情""" api_path = f"/v3/doc-templates/{config.templates_id}" method = "GET" json_headers = buildSignJsonHeader(config.appId, config.scert, method, api_path) resp = requests.request(method, config.host + api_path, headers=json_headers) print(resp.text) def fill_in_template(name): """填写模板生成文件""" api_path = "/v3/files/create-by-doc-template" method = "POST" body = { "docTemplateId": config.templates_id, "fileName": "U店在这-商户入驻协议", "components": [ { "componentKey": "alien_name", "componentValue": "爱丽恩严(大连)商务科技有限公司" }, { "componentKey": "store_name", "componentValue": name }, { "componentKey": "date", "componentValue": datetime.now().strftime("%Y年%m月%d日") }, { "componentKey": "one_name", "componentValue": name }, ] } json_headers = buildSignJsonHeader(config.appId, config.scert, method, api_path, body=body) body_json = json.dumps(body, separators=(",", ":"), ensure_ascii=False) resp = requests.request(method, config.host + api_path, data=body_json, headers=json_headers) print(resp.text) return resp.text def get_contract_detail(file_id): """查询PDF模板填写后文件""" api_path = f"/v3/files/{file_id}" method = "GET" json_headers = buildSignJsonHeader(config.appId, config.scert, method, api_path) resp = requests.request(method, config.host + api_path, headers=json_headers) print(resp.text) return resp.text # get_contract_detail("f0371b4ae7c64c8ca16be3bf031d1d6e") # def create_by_file(file_id, file_name, contact_phone, merchant_name): # """基于文件发起签署""" # api_path = "/v3/sign-flow/create-by-file" # method = "POST" # body = { # "docs": [ # { # "fileId": file_id, # "fileName": f"{file_name}.pdf" # } # ], # "signFlowConfig": { # "signFlowTitle": "商家入驻U店的签署协议", # 请设置当前签署任务的主题 # "autoFinish": True, # "noticeConfig": { # "noticeTypes": "" # # # """通知类型,通知发起方、签署方、抄送方,默认不通知(值为""空字符串),允许多种通知方式,请使用英文逗号分隔 # # # # "" - 不通知(默认值) # # # # 1 - 短信通知(如果套餐内带“分项”字样,请确保开通【电子签名流量费(分项)认证】中的子项:【短信服务】,否则短信通知收不到) # # # # 2 - 邮件通知 # # # # 3 - 钉钉工作通知(需使用e签宝钉签产品) # # # # 5 - 微信通知(用户需关注“e签宝电子签名”微信公众号且使用过e签宝微信小程序) # # # # 6 - 企业微信通知(需要使用e签宝企微版产品) # # # # 7 - 飞书通知(需要使用e签宝飞书版产品) # # # # 补充说明: # # # # 1、2:个人账号中需要绑定短信/邮件才有对应的通知方式; # # 3、5、6、7:仅限e签宝正式环境调用才会有。""" # }, # "notifyUrl": "http://120.26.186.130:33333:/api/store/esign/callback", # 接收相关回调通知的Web地址, # "redirectConfig": { # "redirectUrl": "https://www.esign.cn/" # } # }, # "signers": [ # { # "signConfig": { # "signOrder": 1 # }, # "signerType": 1, # "signFields": [ # { # "customBizNum": "9527", # 开发者自定义业务编号 # "fileId": file_id, #签署区所在待签署文件ID 【注】这里的fileId需先添加在docs数组中,否则会报错“参数错误: 文件id不在签署流程中”。 # "normalSignFieldConfig": { # "autoSign": True, # "signFieldStyle": 1, # "signFieldPosition": { # "positionPage": "7", # "positionX": 294, # 获取需要盖章的位置: https://open.esign.cn/tools/seal-position # "positionY": 668 # } # } # } # ] # }, # { # "psnSignerInfo": { # "psnAccount": contact_phone, # "psnInfo": { # "psnName": merchant_name # } # }, # "signConfig": { # "forcedReadingTime": 10, # "signOrder": 2 # }, # "signerType": 0, # "signFields": [ # { # "customBizNum": "9527", # "fileId": file_id, # "normalSignFieldConfig": { # "signFieldStyle": 1, # "signFieldPosition": { # "positionPage": "7", # "positionX": 114, # 获取需要盖章的位置: https://open.esign.cn/tools/seal-position # "positionY": 666 # } # } # } # ] # } # ] # } # json_headers = buildSignJsonHeader(config.appId, config.scert, method, api_path, body=body) # body_json = json.dumps(body, separators=(",", ":"), ensure_ascii=False) # resp = requests.request(method, config.host + api_path, data=body_json, headers=json_headers) # print(resp.text) # return resp.text def create_by_file(file_id, file_name, contact_phone, store_name, merchant_name, ord_id): """基于文件发起签署""" api_path = "/v3/sign-flow/create-by-file" method = "POST" body = { "docs": [ { "fileId": file_id, "fileName": f"{file_name}.pdf" } ], "signFlowConfig": { "signFlowTitle": "商家入驻U店平台协议签署", "autoFinish": True, "noticeConfig": { "noticeTypes": "1,2" }, "notifyUrl": "http://120.26.186.130:33333:/api/store/esign/callback", "redirectConfig": { "redirectUrl": "https://www.esign.cn/" } }, "signers": [ { "signConfig": { "signOrder": 1 }, "signerType": 1, "signFields": [ { "customBizNum": "9527", "fileId": file_id, "normalSignFieldConfig": { "autoSign": True, "signFieldStyle": 1, "signFieldPosition": { "positionPage": "7", "positionX": 294, "positionY": 668 } } } ] }, { "orgSignerInfo": { "orgName": store_name, "orgInfo": { "orgIDCardNum": ord_id, # "91440300MADDW7XC4C" "orgIDCardType": "CRED_ORG_USCC" }, "transactorInfo": { "psnAccount": contact_phone, "psnInfo": { "psnName": merchant_name } } }, "signConfig": { "forcedReadingTime": 10, "signOrder": 2 }, "signerType": 1, "signFields": [ { "customBizNum": "自定义编码001", "fileId": file_id, "normalSignFieldConfig": { "signFieldStyle": 1, "signFieldPosition": { "positionPage": "7", "positionX": 114, "positionY": 666 } } } ] } ] } json_headers = buildSignJsonHeader(config.appId, config.scert, method, api_path, body=body) body_json = json.dumps(body, separators=(",", ":"), ensure_ascii=False) resp = requests.request(method, config.host + api_path, data=body_json, headers=json_headers) print(resp.text) return resp.text def sign_url(sign_flow_id, contact_phone): """获取签署页面链接""" api_path = f"/v3/sign-flow/{sign_flow_id}/sign-url" method = "POST" body = { "signFlowId": sign_flow_id, "clientType": "ALL", "needLogin": False, "operator": { "psnAccount": contact_phone }, "urlType": 2 } json_headers = buildSignJsonHeader(config.appId, config.scert, method, api_path, body=body) body_json = json.dumps(body, separators=(",", ":"), ensure_ascii=False) resp = requests.request(method, config.host + api_path, data=body_json, headers=json_headers) print(resp.text) return resp.text def file_download_url(sign_flow_id): """下载已签署文件及附属材料""" api_path = f"/v3/sign-flow/{sign_flow_id}/file-download-url" method = "POST" body = { "urlAvailableDate": "3600" } json_headers = buildSignJsonHeader(config.appId, config.scert, method, api_path, body=body) body_json = json.dumps(body, separators=(",", ":"), ensure_ascii=False) resp = requests.request(method, config.host + api_path, data=body_json, headers=json_headers) print(resp.text) return resp.text # fill_in_template("我勒个去") # sing_data = create_by_file("41bd938c47394e6b9bf4a491949c161e", "U店在这-商户入驻协议", "13503301290", "孟骞康") # sign_json = json.loads(sing_data) # sing_id = sign_json["data"]["signFlowId"] # sign_url("", "13503301290") # file_download_url("15156afb603e4145b112ad6eab0815d5")