Ejemplo n.º 1
0
def save_order_payment_result():
    """
    保存订单支付结果
    :return:
    """
    alipay_dict = request.form.to_dict()

    alipay_sign = alipay_dict.pop("sign")

    alipay_client = Alipay(
        appid='2016092500594612',
        app_notify_url=None,
        app_private_key_path=os.path.join(os.path.dirname(__file__),
                                          "keys/app_private_key.pem"),
        alipay_public_key_path=os.path.join(os.path.dirname(__file__),
                                            "keys/alilay_public_key.pem"),
        sign_type='RSA2',
        debug=True)

    result = alipay_client.verify(alipay_dict, alipay_sign)

    if request:
        order_id = alipay_dict.get("out_trade_no")
        trade_no = alipay_dict.get("trade_no")
    try:
        Order.query.filter_by(id=order_id).update({
            "status": "WAIT_COMMENT",
            "trade_no": "trade_no"
        })
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()

    return jsonify(code=RET.OK, msg="OK")
Ejemplo n.º 2
0
    def get(self, request, order_id):
        user = request.user
        try:
            order = OrderInfo.objects.get(
                order_id=order_id,
                user=user,
                pay_method=OrderInfo.PAY_METHODS_ENUM["ALIPAY"],
                status=OrderInfo.ORDER_STATUS_ENUM["UNPAID"],
            )
        except OrderInfo.DoesNotExist:
            return Response({'meaaage': '订单错误'},
                            status=status.HTTP_400_BAD_REQUEST)

        alipay = Alipay(appid="2016100100641406",
                        app_notify_url=None,
                        app_private_key_path=os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            'app_private_key.pem'),
                        alipay_public_key_path=os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            'alipay_public_key.pem'),
                        sign_type="RSA2",
                        debug=True)

        sum_price = order.total_amount
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_id,
            total_amount=str(sum_price),
            subject='美多商城',
            return_url='http://www.meiduo.site:8080/pay_success.html',
            notify_url=None  # this is optional
        )
        alipay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string

        return Response({'alipay_url': alipay_url})
Ejemplo n.º 3
0
def pay(request):
    package_id = request.GET.get("setPackId")
    pay_type = request.GET.get('type')
    if package_id is not None:
        order_id = str(int(time.time() * 1000))
        package = Package.objects.get(id=package_id)
        if pay_type == "0":
            alipay = Alipay(pid='2088021435732027',
                            key='g5eerb3z111h75kpo3mfa1cibacbloo6',
                            seller_email='*****@*****.**')
            url = alipay.create_direct_pay_by_user_url(
                out_trade_no=order_id,
                subject=package.name + u" - 亚马逊辅助工具",
                total_fee=package.price,
                return_url=domain + '/alipay/return-url',
                notify_url=domain + '/alipay/notify-url')
            Order.objects.create(order_id=int(order_id),
                                 createuser=request.user,
                                 package=package,
                                 pay_method=pay_type)
            return HttpResponseRedirect(url)
    else:
        template = loader.get_template('404.html')
        context = {}
        return HttpResponse(template.render(context, request))
Ejemplo n.º 4
0
	def post(self,request):
		# 用户是否登录
		user = request.user
		if not user.is_authenticated():
			return JsonResponse({'res':0,'errmsg':'用户未登陆'})

		# 接收参数
		order_id = request.POST.get('order_id')

		# 校验参数
		if not order_id:
			return JsonResponse({'res':1,'errmsg':'无效的订单id'})
		
		try:  #查出的订单必须要符合id相同,用户相同,支付方式为3,订单状态为:未支付
			order = OrderInfo.objects.get(order_id = order_id,
											user = user,
											pay_method = 3,
											order_status = 1)
		except OrderInfo.DoesNotExist:
			return JsonResponse({'res':1,'errmsg':订单错误})

		# 业务处理:使用python sdk调用支付宝的支付接口


		# 初始化
		alipay = Alipay(
			appid = "2016093000628658", #自己沙箱中的APPID
			app_notify_url = None, #默认的回调url
			app_private_key_path = os.path.join(settings.BASE_DIR,'apps/order/app_private_key.pem'),
			alipay_public_key_path = os.path.join(settings.BASE_DIR,'apps/order/alipay_public_key.pem'),
			sign_type = "RSA2",  #RSA或者RSA2
			debug = "True"  #沙箱模式就是调试模式
			)

		# 调用支付宝的交易查询接口(可传两个参数,out_trade_no订单号;trade_no,支付宝交易号,二者只需一个即可)
		while True:
			response = alipay.api_alipay_trade_query(order_id)
			# response是一个字典

			code = response.get('code') #查看借口是否调用成功
			if code == '10000' and response.get('trade_status') == 'TRADE_SUCCESS':
				# 支付成功
				# 获取支付宝交易号
				trade_no = response.get('trade_no')
				# 更新订单状态
				order.trade_no = trade_no
				order.order_status = 4  #处于待评价状态
				order.save()
				# 返回结果
				return JsonResponse({'res':3,'errmsg':'支付成功'})
			elif code == '40004' or (code == '10000' and response.get('trade_status') == 'WAIT_BUYER_PAY'):
				# 等待买家付款
				# 业务处理失败,一会就会处理成功
				import time
				time.sleep(5)
				continue
			else:
				# 支付出错
				return JsonResponse({'res':4,'errmsg':'支付失败'})
Ejemplo n.º 5
0
    def alipayPayment2(self,
                       is_prod_server,
                       request_id,
                       user_email,
                       amount,
                       product,
                       point_for_use=0,
                       promo_type='',
                       promo_code=''):

        host_name = ""
        if is_prod_server == False:
            host_name = "http://ciceron.xyz:5000"
        else:
            host_name = "http://ciceron.me:5000"

        postprocess_endpoint = self._organizePostprocessApiAddress(
            product, request_id)
        postprocess_api = "{}/{}".format(host_name, postprocess_endpoint)

        order_no = self._orderNoGenerator()
        param_dict = {
            'payment_platform': 'alipay',
            'product': product,
            'request_id': request_id,
            'status': 'success',
            'user_email': user_email,
            'amount': amount,
            'point_for_use': point_for_use,
            'promo_type': promo_type,
            'promo_code': promo_code,
            'ciceron_order_no': order_no
        }
        return_url = ciceron_lib.dictToUrlParam(postprocess_api, **param_dict)

        alipay_obj = Alipay(pid='111',
                            key='<be_secret>',
                            seller_email='*****@*****.**')
        params = {
            'subject': '诗谐论翻译'.decode('utf-8'),
            'out_trade_no': order_no,
            'total_fee': '%.2f' % amount,
            'currency': 'USD',
            'quantity': '1',
            'return_url': return_url
        }

        provided_link = None
        try:
            if pay_by == 'web':
                provided_link = alipay_obj.create_forex_trade_url(**params)
            elif pay_by == 'mobile':
                provided_link = alipay_obj.create_forex_trade_wap_url(**params)
        except:
            return False, None

        return True, provided_link
Ejemplo n.º 6
0
	def post(self, request):
		'''订单支付'''

		# 用户是否登录
		user = request.user
		if not user.is_authenticated():
			return JsonResponse({'res':0,'errmsg':'用户未登陆'})

		# 接收参数
		order_id = request.POST.get('order_id')

		# 校验参数
		if not order_id:
			return JsonResponse({'res':1,'errmsg':'无效的订单id'})
		
		try:  #查出的订单必须要符合id相同,用户相同,支付方式为3,订单状态为:未支付
			order = OrderInfo.objects.get(order_id = order_id,
											user = user,
											pay_method = 3,
											order_status = 1)
		except OrderInfo.DoesNotExist:
			return JsonResponse({'res':1,'errmsg':订单错误})

		# 业务处理:使用python sdk调用支付宝的支付接口


		# 初始化
		alipay = Alipay(
			appid = "2016093000628658", #自己沙箱中的APPID
			app_notify_url = None, #默认的回调url
			app_private_key_path = os.path.join(settings.BASE_DIR,'apps/order/app_private_key.pem'),
			alipay_public_key_path = os.path.join(settings.BASE_DIR,'apps/order/alipay_public_key.pem'),
			sign_type = "RSA2",  #RSA或者RSA2
			debug = "True"  #沙箱模式就是调试模式
			)
		# 调用支付接口
		# 电脑网站支付,需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string
		total_pay = order.total_price + order.transit_price  #Decimal类型,无法序列化
		order_string = alipay.api_alipay_trade_page_pay(
			out_trade_no = order_id,#订单号
			total_amount = str(total_pay), #原本是Decimal数据类型,无法序列化Json形式,只能先转化为str
			subject = '天天生鲜%s'%order_id, #标题
			return_url = None,
			notify_url = None #都不填,因为我们现在没有公网ip
			)

		# 返回应答
		pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
		return JsonResponse({'res':3,'pay_url':pay_url})
Ejemplo n.º 7
0
def create_alipay():
    """
    创建支付宝对象
    :return: 支付宝对象
    """
    alipay = Alipay(
        appid=settings.ALIPAY_APPID,
        # 回调地址
        app_notify_url=None,
        # 公钥路径
        alipay_public_key_path=settings.ALIPAY_PUBLIC_KEY_PATH,
        # 私钥路径
        app_private_key_path=settings.APP_PRIVATE_KEY_PATH,
        # 加密方式
        sign_type='RSA2',
        debug=True,
    )
    return alipay
Ejemplo n.º 8
0
    def put(self, request):
        data = request.query_params.dict()
        signature = data.pop("sign")

        alipay = Alipay(appid="2016100100641406",
                        app_notify_url=None,
                        app_private_key_path=os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            'app_private_key.pem'),
                        alipay_public_key_path=os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            'alipay_public_key.pem'),
                        sign_type="RSA2",
                        debug=True)

        success = alipay.verify(data, signature)

        if not success:
            return Response({'message': '非法请求'},
                            status=status.HTTP_403_FORBIDDEN)

        # 获取订单编号和支付宝流水号
        order_id = data.get('out_trade_no')
        trade_id = data.get('trade_no')

        # 校验订单id(order_id)
        try:
            order = OrderInfo.objects.get(
                order_id=order_id,
                user=request.user,
                status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'])
        except OrderInfo.DoesNotExist:
            return Response({'message': '订单信息有误'},
                            status=status.HTTP_400_BAD_REQUEST)

        # 更新订单的支付状态
        order.status = OrderInfo.ORDER_STATUS_ENUM['UNSEND']
        order.save()

        return Response({'trade_id': trade_id})
Ejemplo n.º 9
0
def order_pay(order_id):
    """发起支付宝支付"""

    # 获取用户的id
    user_id = g.user_id

    # 判断订单状态
    try:
        order = Order.query.filter(Order.id==order_id, Order.user_id==user_id, Order.status=="WAIT_PAYMENT").first()
    except Exception as e:
        current_app.logger.errer(e)
        return jsonify(errno=RET.DBERR, errmsg='数据库异常')

    if order is None:
        return jsonify(errno=RET.NODATA, errmsg='订单数据有误')


    # 创建支付宝sdk的工具对象
    alipay_client = Alipay(
        appid="2016101000651363",
        app_notify_url=None,
        app_private_key_path=os.path.join(os.path.dirname(__file__), "keys/private_key.pem"),
        alipay_public_key_path=os.path.join(os.path.dirname(__file__), "keys/zfb_public_key.pem"),
        sign_type="RSA2",
        debug=True
    )

    # 手机网站支付,需要跳转到https://openhome.alipaydev.com/gateway.do+order_string

    order_string = alipay_client.api_alipay_trade_way_pay(
        out_trade_no=order.id,
        total_amount=str(order.amount/100.0),
        subject="爱家租房 %s" % order.id,
        return_url="127.0.0.1:5000/orders.html",
        notify_url=None
    )

    # 构建让用户跳转的支付链接地址
    pay_url = constants.ALIPAY_URL_PREFIX + order_string
    return jsonify(errno=RET.OK, errmsg="OK", data={"pay_url": pay_url})
Ejemplo n.º 10
0
def AlipayView(request):
    order_number = request.GET.get('order_number')
    order_total = request.GET.get('total')

    # 实例化支付
    alipay = Alipay(appid='2016101200667735',
                    app_notify_url=None,
                    app_private_key_string=alipay_private_key_string,
                    alipay_public_key_string=alipay_public_key_string,
                    sign_type='RSA2')
    # 实例化订单
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no=str(order_number),
        total_amount=str(order_total),
        subject='服装',
        return_url="/Buyer/pay_result/",
        notify_url="/Buyer/pay_result/",
    )  # 网页支付订单

    # 拼接收款地址=支付宝网关+订单返回参数
    result = "https://openapi.alipaydev.com/gateway.do?" + order_string
    return HttpResponseRedirect(result)
Ejemplo n.º 11
0
def order_pay(order_id):
    """
    发起支付宝支付
    :return:
    """

    user_id = g.user_id

    try:
        order = Order.query.filter(Order.id == order_id,
                                   Order.user_id == user_id,
                                   Order.status == "WAIT_PAYMENT").first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(RET.DBERR, "数据库异常")

    if order is None:
        return jsonify(code=RET.NODATA, msg="订单数据有误")

    alipay_client = Alipay(
        appid='2016092500594612',
        app_notify_url=None,
        app_private_key_path=os.path.join(os.path.dirname(__file__),
                                          "keys/app_private_key.pem"),
        alipay_public_key_path=os.path.join(os.path.dirname(__file__),
                                            "keys/alilay_public_key.pem"),
        sign_type='RSA2',
        debug=True)

    order_string = alipay_client.api_alipay_trade_wap_pay(
        out_trade_no=order.id,
        total_amount=str(order.amount / 100.0),
        subject=u"租房 %s" % order.id,
        return_url="http://127.0.0.1:5000/payComplete.html",
        notify_url=None)

    pay_url = const.ALIPAY_URL_PREFIX + order_string
    return jsonify(code=RET.OK, msg="OK", data={"pay_url": pay_url})
Ejemplo n.º 12
0
    def post(self,request):
        user = request.user
        if not user.is_authenticated():
            return redirect(reverse('user:login'))

        ordid_after = request.POST.get('order_id')
        if not ordid_after:
            return JsonResponse({'info':'订单不存在'})
        try:
            Order.objects.get(order_id=ordid_after,user=user,pay_style=1,states=0)
        except Exception as e:
            return JsonResponse({'indo':'订单不存在'})
        # alipay = Alipay(
        #     appid=''
        #     app_notify
        # )
        alipay = Alipay(
            appid='2016091400508206',
            app_notify_url=None,  # 默认回调url
            app_private_key_path=os.path.join(settings.BASE_DIR, "user/orderform/app_private_key.pem"),
            alipay_public_key_path=os.path.join(settings.BASE_DIR, "user/orderform/app_public_key.pem"),
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=True  # 默认False  配合沙箱模式使用
            )

        ord_cost = order.tprice
        order_sit=alipay.api_alipay_trade_page_pay(
            subject='hsrsc',
            out_trade_no=ordid_after,
            total_amount=ord_cost,
            return_url=None,
            notify_url=None,
        )
        # alipay.api_alipay_trade_page_pay这里应该有个结果返回接口
        url = 'https://openapi.alipaydev.com/gateway.do'+ordid_after
        return JsonResponse({'info':'','cost_url':url})
Ejemplo n.º 13
0
from django.core.urlresolvers import reverse
from payment.config import settings
from alipay import Alipay
from .models import Bill
import urllib
from accounts.models import UserSettings
from django.db.models import F
from django.views.decorators.csrf import csrf_exempt
from actions.utils import create_action
from asin_keyword.emails import send_email
from short_url.shorten_url import get_short_code
from django.http import HttpResponse
#import datetime

alipay = Alipay(pid=settings.ALIPAY_PARTNER,
                key=settings.ALIPAY_KEY,
                seller_email=settings.ALIPAY_SELLER_EMAIL)


def buy_credit(user, credit, request):
    user.update(credit=F('credit') + credit)
    create_action(request.user, '购买了%s积分' % (credit))


@login_required
def upgrade_account(request, add_credit):

    user = request.user
    try:
        bill = user.bill
    except:
Ejemplo n.º 14
0
 def get_alipay(self):
     from alipay import Alipay
     return Alipay(self.app_id, self.app_secret, self.seller_email)
Ejemplo n.º 15
0
 def Alipay(self, *a, **kw):
     from alipay import Alipay
     return Alipay(*a, **kw)
Ejemplo n.º 16
0
    def alipayPayment(self,
                      is_prod_server,
                      request_id,
                      user_email,
                      amount,
                      point_for_use=0,
                      promo_type='',
                      promo_code='',
                      is_additional=False,
                      is_groupRequest=False,
                      is_public=False):

        host_name = ""
        if is_prod_server == False:
            host_name = "http://ciceron.xyz:5000"
        else:
            host_name = "http://ciceron.me:5000"
        pay_by = "web"

        postprocess_api = "%s/%s" % (
            host_name, 'api/user/requests/%d/payment/postprocess' % request_id)

        order_no = self._orderNoGenerator()
        param_dict = {
            'pay_via': 'alipay',
            'status': 'success',
            'user_id': user_email,
            'pay_amt': amount,
            'pay_by': pay_by,
            'use_point': point_for_use,
            'promo_type': promo_type,
            'promo_code': promo_code,
            'ciceron_order_no': order_no,
            'is_additional': 'false' if is_additional == False else 'true',
            'is_groupRequest': 'false' if is_groupRequest == False else 'true',
            'is_public': 'false' if is_public == False else 'true'
        }
        return_url = ciceron_lib.apiURLOrganizer(postprocess_api, **param_dict)

        alipay_obj = Alipay(pid='111',
                            key='secret',
                            seller_email='*****@*****.**')
        params = {
            'subject': '诗谐论翻译'.decode('utf-8'),
            'out_trade_no': order_no,
            #'subject': 'TEST',
            'total_fee': '%.2f' % amount,
            'currency': 'USD',
            'quantity': '1',
            'return_url': return_url
        }

        provided_link = None
        try:
            if pay_by == 'web':
                provided_link = alipay_obj.create_forex_trade_url(**params)
            elif pay_by == 'mobile':
                provided_link = alipay_obj.create_forex_trade_wap_url(**params)
        except:
            return False, None

        return True, provided_link
Ejemplo n.º 17
0
            m = UserProfile.objects.filter(user_id=id).update(
                usermoney=personnewmoney)
            return render(request, 'error.html', {
                'title': '恭喜您',
                'context': '充值成功'
            })
        else:
            return render(request, 'error.html', {
                'title': '发生错误',
                'context': '代金卷未发现或已失效'
            })
    else:
        return HttpResponseRedirect(reverse('signin'))


alipay = Alipay(pid='zzz', key='zzz', seller_email='*****@*****.**')


#set alipay
def trade_check(request):
    '''doc https://github.com/lxneng/alipay'''
    if request.user.is_authenticated():
        if request.method == 'GET':
            return render_to_response('change-password.html', {},
                                      context_instance=RequestContext(request))
        elif request.method == 'POST':
            try:
                money = request.POST['money']
                try:
                    if int(money) >= 0:
                        id = request.user.id
Ejemplo n.º 18
0
import json
import time
import tornado.web
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.websocket
import urllib.parse
from alipay import Alipay
from micropay import Micropay
from history import History
from configs.config import configs

payment_methods = {
    'alipay':
    Alipay(configs.alipay.app_id, configs.alipay.cert_path,
           configs.alipay.default_subject),
    'mircopay':
    Micropay(configs.mircopay.app_id, configs.mircopay.mch_id,
             configs.mircopay.key, configs.mircopay.cert_path,
             configs.mircopay.cert_key_path)
}

history = History('lemonpay')


class root_handler(tornado.web.RequestHandler):
    def get(self):
        self.render('index.html')


class payment_handler(tornado.web.RequestHandler):