def alipay_query(cls, out_trade_no, trade_no, receipt, trade_type): '''alipay query''' try: config_dict = { VIPOrder.PAY_TYPE_BY_ALIPAY_APP: settings.ALIPAY_APP_INFO, VIPOrder.PAY_TYPE_BY_ALIPAY: settings.ALIPAY_APP_INFO, } config = config_dict[trade_type] alipay_client_config = AlipayClientConfig() alipay_client_config.app_id = smart_str(config['basic_info']['APP_ID']) alipay_client_config.sign_type = smart_str(config['other_info']['SIGN_TYPE']) with open(config['basic_info']['APP_PRIVATE_KEY'], 'r') as fp: alipay_client_config.app_private_key = fp.read() client = DefaultAlipayClient(alipay_client_config=alipay_client_config) model = AlipayTradeQueryModel() model.out_trade_no = smart_str(out_trade_no) if trade_no: model.trade_no = smart_str(trade_no) request = AlipayTradeQueryRequest(biz_model=model) request_params = client.sdk_execute(request) resp = requests.get('{}?{}'.format(SERVER_URL, request_params)).json() log.info('********** alipay query result ***********') log.info(resp) query_resp = resp['alipay_trade_query_response'] return { 'trade_status': query_resp.get('trade_status') == 'TRADE_SUCCESS', 'total_fee': float(query_resp.get('total_amount', 0)), 'refno': query_resp.get('trade_no', ''), } except Exception, e: log.exception(e)
def post(self, request, *args, **kwargs): try: package_id = request.POST.get('package_id') order = VIPOrder.create_order(request.user, int(package_id)) if order: log.info('****** order id: {} ******'.format(order.id)) order.pay_type = VIPOrder.PAY_TYPE_BY_ALIPAY_APP out_trade_no = create_trade_id(order.id) order.outtradeno = out_trade_no order.save() result = {'order_id': order.id} alipay_client_config = AlipayClientConfig() alipay_client_config.app_id = smart_str(settings.ALIPAY_APP_INFO['basic_info']['APP_ID']) alipay_client_config.sign_type = smart_str(settings.ALIPAY_APP_INFO['other_info']['SIGN_TYPE']) with open(settings.ALIPAY_APP_INFO['basic_info']['APP_PRIVATE_KEY'], 'r') as fp: alipay_client_config.app_private_key = fp.read() client = DefaultAlipayClient(alipay_client_config=alipay_client_config) model = AlipayTradeAppPayModel() model.total_amount = smart_str(str_to_specify_digits(str(order.price))) model.product_code = smart_str("QUICK_MSECURITY_PAY") model.body = smart_str(order.name) model.subject = smart_str(order.name) model.out_trade_no = smart_str(out_trade_no) model.passback_params = smart_str(settings.LMS_ROOT_URL + reverse("vip_purchase")) request = AlipayTradeAppPayRequest(biz_model=model) request.notify_url = smart_str(settings.ALIPAY_APP_INFO['other_info']['NOTIFY_URL']) result['alipay_request'] = client.sdk_execute(request) return Response(data=result) except Exception, e: log.exception(e)
class Alipay: """ 支付宝支付 """ def __init__(self): self._set_config() self.client = DefaultAlipayClient(alipay_client_config=self.config, logger=logger) def _set_config(self): " 设置配置项 " config = AlipayClientConfig() config.server_url = 'https://openapi.alipay.com/gateway.do' config.app_id = settings.ALIPAY['appid'] config.app_private_key = settings.ALIPAY['app_private_key'] config.alipay_public_key = settings.ALIPAY['alipay_public_key'] config.sign_type = 'RSA2' self.config = config def get_pay_data(self, order, ip): " 获取支付数据 " model = AlipayTradeAppPayModel() model.total_amount = str(order.amount) model.subject = "" model.out_trade_no = order.number request = AlipayTradeAppPayRequest(biz_model=model) request.notify_url = '' response = self.client.sdk_execute(request) return {'detail': response} def parse_result(self, result): " 解析异步通知返回值 " try: if result['trade_status'] == 'TRADE_SUCCESS': is_success = True else: is_success = False return is_success, result except KeyError: logger.warning('keyerror') return False, None def check_result(self, data): " 验证返回值 " return True def return_failure(self): return "success" def return_success(self): return "success"
def TradeWapPay(self, body, out_trade_no, total_amount): client = DefaultAlipayClient( alipay_client_config=self.alipay_client_config, logger=logger) model = AlipayTradeWapPayModel() model.body = body model.subject = 'parkingpay' model.out_trade_no = out_trade_no model.total_amount = total_amount model.product_code = 'QUICK_WAP_WAY' request = AlipayTradeWapPayRequest(biz_model=model) response = client.sdk_execute(request) print("alipayhm.trade.wap.pay response:" + str(response)) return str(response)
def TradeAppPay(self, body, subject, out_trade_no, total_amount): client = DefaultAlipayClient( alipay_client_config=self.alipay_client_config, logger=logger) model = AlipayTradeAppPayModel() model.body = body model.subject = subject model.out_trade_no = out_trade_no model.total_amount = '0.01' model.timeout_express = self._alipy_apps['ALIPAY_TIMEOUT_EXPRESS'] model.product_code = 'QUICK_MSECURITY_PAY' request = AlipayTradeAppPayRequest(biz_model=model) request.notify_url = self._alipy_apps['ALIPAY_NOTIFY_URL'] response = client.sdk_execute(request) return str(response)
def get(self, request, *args, **kwargs): try: package_id = request.GET.get('package_id') order = VIPOrder.create_order(request.user, int(package_id)) if order: order.pay_type = VIPOrder.PAY_TYPE_BY_ALIPAY_APP out_trade_no = create_trade_id(order.id) order.outtradeno = out_trade_no order.save() result = {'order_id': order.id} alipay_client_config = AlipayClientConfig() alipay_client_config.app_id = smart_str( settings.ALIPAY_APP_INFO['basic_info']['APP_ID']) alipay_client_config.sign_type = smart_str( settings.ALIPAY_APP_INFO['other_info']['SIGN_TYPE']) with open( settings.ALIPAY_APP_INFO['basic_info'] ['APP_PRIVATE_KEY'], 'r') as fp: alipay_client_config.app_private_key = fp.read() client = DefaultAlipayClient( alipay_client_config=alipay_client_config) model = AlipayTradeWapPayModel() model.total_amount = smart_str( str_to_specify_digits(str(order.price))) model.product_code = smart_str("QUICK_WAP_WAY") model.subject = smart_str(_(order.name)) model.out_trade_no = smart_str(out_trade_no) # 返回页面时不使用缓存 quit_url = settings.LMS_ROOT_URL + reverse( "vip_alipay_h5_result") model.quit_url = smart_str(quit_url) model.passback_params = smart_str(settings.LMS_ROOT_URL + reverse("vip_purchase")) request = AlipayTradeWapPayRequest(biz_model=model) request.notify_url = smart_str( settings.ALIPAY_APP_INFO['other_info']['NOTIFY_URL']) result['alipay_request'] = client.sdk_execute(request) log.error(SERVER_URL + "?" + result['alipay_request']) data = { 'alipay_url': SERVER_URL + "?" + result['alipay_request'], 'order_id': order.id } return Response(xresult(data=data)) except Exception, e: log.exception(e)
settle_detail_info = SettleDetailInfo() settle_detail_info.amount = 50 settle_detail_info.trans_in_type = "userId" settle_detail_info.trans_in = "2088302300165604" settle_detail_infos = list() settle_detail_infos.append(settle_detail_info) settle_info = SettleInfo() settle_info.settle_detail_infos = settle_detail_infos model.settle_info = settle_info sub_merchant = SubMerchant() sub_merchant.merchant_id = "2088301300153242" model.sub_merchant = sub_merchant request = AlipayTradePagePayRequest(biz_model=model) # 得到构造的请求,如果http_method是GET,则是一个带完成请求参数的url,如果http_method是POST,则是一段HTML表单片段 response = client.page_execute(request, http_method="GET") print("alipay.trade.page.pay response:" + response) """ 构造唤起支付宝客户端支付时传递的请求串示例:alipay.trade.app.pay """ model = AlipayTradeAppPayModel() model.timeout_express = "90m" model.total_amount = "9.00" model.seller_id = "2088301194649043" model.product_code = "QUICK_MSECURITY_PAY" model.body = "Iphone6 16G" model.subject = "iphone" model.out_trade_no = "201800000001201" request = AlipayTradeAppPayRequest(biz_model=model) response = client.sdk_execute(request) print("alipay.trade.app.pay response:" + response)