Esempio n. 1
0
    def __init__(self):
        self.app_id = config.APPID
        self.app_secret = config.APP_SECRTET
        self.mch_id = config.MCH_ID
        self.mch_key = config.MCH_KEY

        # url处理
        self.encodeURL = config.ENCODE_URL
        # self.URL = config.URL
        self.base_url = config.BASE_URL
        self.notify_url = config.WEIXIN_NOTIFY_URL

        # 初始化
        self.wx_login = WeixinLogin(self.app_id, self.app_secret)
        self.wx_pay = WeixinPay(self.app_id, self.mch_id, self.mch_key,
                                self.notify_url)
Esempio n. 2
0
    raw = dict(
        appid=self.app_id,
        partnerid=self.mch_id,
        prepayid=result['prepay_id'],
        noncestr=self.nonce_str,
        timestamp=timestamp,
        package='Sign=WXPay',
    )
    raw['sign'] = self.sign(raw)
    return raw


WeixinPay.app_order = app_order

alipay = AliPay(**settings.ALIPAY)
wechat_pay = WeixinPay(**settings.WECHAT_PAY)
datetime_format = settings.REST_FRAMEWORK['DATETIME_FORMAT']
logger = logging.getLogger()


class PayService:
    # 订单号规则:xxxx年xx月xx日xxxxx,案例:2018020500001。获取下单日期和当天的订单排序,从1开始,自然数
    @classmethod
    def generate_out_trade_no(cls):
        return f"{datetime.now().strftime('%Y%m%d')}{get_order_no_serial()}"

    @classmethod
    def generate_name(cls, obj):
        if not isinstance(obj, User):
            return f'{obj.__class__._meta.verbose_name}'
        return '充值'
Esempio n. 3
0
# -*- coding: utf-8 -*-
from weixin import WeixinError
from weixin.pay import WeixinPay

from .config import WxConfig

pay = WeixinPay(WxConfig.APPID, WxConfig.MCHID, WxConfig.KEY,
                WxConfig.SSLKEY_PATH, WxConfig.SSLCERT_PATH)


def js_pay(openid, body, out_trade_no, fee, attach):
    try:
        raw = pay.jsapi(openid=openid,
                        body=body,
                        out_trade_no=out_trade_no,
                        total_fee=fee,
                        attach=attach)
        return raw
    except WeixinError as err:
        return str(err)


payRoute = []
Esempio n. 4
0
class WxPay(http.Controller):
    def __init__(self):
        self.app_id = config.APPID
        self.app_secret = config.APP_SECRTET
        self.mch_id = config.MCH_ID
        self.mch_key = config.MCH_KEY

        # url处理
        self.encodeURL = config.ENCODE_URL
        # self.URL = config.URL
        self.base_url = config.BASE_URL
        self.notify_url = config.WEIXIN_NOTIFY_URL

        # 初始化
        self.wx_login = WeixinLogin(self.app_id, self.app_secret)
        self.wx_pay = WeixinPay(self.app_id, self.mch_id, self.mch_key,
                                self.notify_url)

    @http.route("/odoo/login/<param>", auth="public", website=True)
    def login(self, param, **kwargs):
        """
        微信获取code
        :param param: 传入参数名(非字典、列表)
        :return:
        """
        redirect_url = self.base_url + param
        openid = request.httprequest.cookies.get("openid")
        next = request.httprequest.args.get("next") or redirect_url
        if openid:
            return request.redirect(next)
        # callback = url_for("authorized", next=next, _external=True)
        callback = self.encodeURL + "?next=" + next
        url = self.wx_login.authorize(
            callback, "snsapi_base")  # 引导用户跳转到授权页面,callback = redirect_uri
        return request.redirect(url)

    @http.route("/odoo/authorized", auth="public", website=True)
    def authorized(self, **kwargs):
        """
        微信验证获取openid
        :return:
        """
        code = request.httprequest.args.get("code")
        if not code:
            return "ERR_INVALID_CODE", 400
        next = request.httprequest.args.get("next")
        data = self.wx_login.access_token(code)  # 通过code换取网页授权access_token
        openid = data.openid
        resp = request.redirect(next)
        expires = datetime.now() + timedelta(days=1)
        resp.set_cookie("openid", openid, expires=expires)
        return resp

    @http.route("/odoo/pay/create", type="json", auth="public", website=True)
    def pay_create(self, **kwargs):
        """
        微信JSAPI创建统一订单,并且生成参数给JS调用
        必填参数:
            out_trade_no 商户订单号
            body 商品描述
            total_fee 商品描述
            openid 用户标识
        """
        # 网页端调起支付API
        try:
            remote_addr = request.httprequest.environ[
                'REMOTE_ADDR']  # 获取远程客户端IP
            openid = request.httprequest.cookies.get("openid")
            out_trade_no = self.wx_pay.nonce_str  # 商户订单号设定为随机字符串
            raw = self.wx_pay.jsapi(openid=openid,
                                    body=u"测试",
                                    out_trade_no=out_trade_no,
                                    total_fee=1,
                                    spbill_create_ip=remote_addr)  # 外部传入openid
            return json.dumps(raw)  # 直接返回包含Json格式数据响应的方法
        except WeixinPayError as e:
            print(e.message)
            return e.message, 400

    @http.route("/odoo/pay/notify", auth="public", website=True)
    def pay_notify(self, **kwargs):
        """
        微信异步通知
        """
        data = self.wx_pay.to_dict(request.data)
        if not self.wx_pay.check(data):
            return self.wx_pay.reply("签名验证失败", False)
        return self.wx_pay.reply("OK", True)  # 处理业务逻辑
Esempio n. 5
0
 def get_raw_response(self):
     return Map(
         WeixinPay(None, None, None, None).to_dict(
             self.xml_response)) if self.xml_response else None
Esempio n. 6
0
"""

app_id = "wx7376a2b8c3146546"
app_secret = "877c99113297bb5fd8e41e9e9b831dff"
wx_login = WeixinLogin(app_id, app_secret)
mch_id = "1534364961"
mch_key = "wieuro9874297352sryoqiwUIUEUYwie"

# url处理
encodeURL = "http%3A%2F%2Fwww.ai-solution.cn%2Fodoo%2Fauthorized"  # 网站域名的encodeURLComponent
URL = "http://www.ai-solution.cn/odoo/activity/"
base_url = "http://www.ai-solution.cn/odoo"
notify_url = base_url + "/wxpay/notify"  # 异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数

# 初始化
wx_pay = WeixinPay(app_id, mch_id, mch_key, notify_url)


class WxPay(http.Controller):
    @http.route("/odoo/login/<activity_name>", auth="public", website=True)
    def login(self, activity_name, **kwargs):
        """
        微信获取code
        :param activity_name: 活动名
        :return:
        """
        redirect_url = URL + activity_name
        openid = request.httprequest.cookies.get("openid")
        next = request.httprequest.args.get("next") or redirect_url
        if openid:
            return request.redirect(next)
Esempio n. 7
0
 def pay(self):
     url = reverse('weixin:pay_notify', args=[self.name])
     full_url = '%s%s' % (settings.BASE_URL, url)
     pay = WeixinPay(self.app_id, self.mch_id, self.mch_key, full_url)
     return pay
Esempio n. 8
0
from . import pay
from .. import db
from ..models import Order, User, Machine
from flask import Flask, request, jsonify
from weixin.pay import WeixinPay, WeixinPayError
import time

app = Flask(__name__)
wx_pay = WeixinPay(
    '88888888',  # app_id 公众号APP_ID。
    '88888888',  # mch_id 商户号。
    '88888888',  # mch_key 商户开发秘钥。
    'http://pay.fm-ai.com/pay/notify',  # notify_url 支付成功后回调地址。
)


@pay.route('/hello')
def hello():
    return 'Hello World!'


@pay.route('/jsapi', methods=['POST'])
def pay_jsapi():
    """
    微信JSAPI创建统一订单,并且生成参数给JS调用
    :return: 微信格式XML
    """
    data_dict = wx_pay.to_dict(request.data.decode('utf-8'))
    product_id = data_dict['product_id']
    m = Machine.query.get_or_404(int(product_id))
    fee = m.fee
Esempio n. 9
0
from datetime import datetime

from weixin.pay import WeixinPay, WXAppPay

APPID = 'wx1a66ade27075a7fc'

MCHID = '1469243702'

API_KEY = 'HSJUJJSH8281iwjsjkks8JKEEKKE8SPQ'


wxpay = WeixinPay(appid=APPID,
                  mch_id=MCHID,
                  api_key=API_KEY,
                  partner_key=API_KEY)

press = int(100.19 * 100)
print(press)

create_pay_info = {
    'body': '1ha2111i',  # 商品描述
    'out_trade_no': '28999919911999934496',  # 商户订单号
    'total_fee': press,  # 标价金额
    'spbill_create_ip': '133.125.12.123',  # 终端IP
    'notify_url': 'http://www.wei1xin.qq.com/wxpay/pay.php',  # 通知地址
    'trade_type': 'JSAPI',  # 交易类型
    'openid': 'oI-n80EBQTFeyjsR88EjtCoAkEkE'  # 用户的open-id
}

if __name__ == '__main__':
    print('1')
Esempio n. 10
0
 def pay(self):
     url = reverse('weixin:pay_notify', args=[self.name])
     full_url = 'http://%s%s' % (wx_conf.BIND_DOMAIN, url)
     pay = WeixinPay(self.app_id, self.mch_id, self.mch_key, full_url)
     return pay
Esempio n. 11
0
# -*- coding: utf-8 -*-

from weixin.helper import smart_bytes
from weixin.pay import WeixinPay

APPID = 'appid'
MCH_ID = 'mchid'

create_pay_info = {
    'body': smart_bytes("这里写点啥呢?"),
    'out_trade_no': '20181206130823938475',
    'total_fee': 1,
    'trade_type': "JSAPI",
    'openid': 'ol9GscXefkyakBnRV4s',
}

wxpay = WeixinPay(APPID,
                  MCH_ID,
                  partner_key='partner key',
                  notify_url='http://www.qq.com/pay/notify')
order = wxpay.unifiedorder(**create_pay_info)

print(order)