{ "info": { "author": "Bosco Curtu", "author_email": "bcurtu@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content" ], "description": "==============\ndjango-sermepa\n==============\n\nDjango sermepa es una aplicaci\u00f3n muy al estilo de django-paypal para usar el TPV Virtual de Redsys/Sermepa, el TPV m\u00e1s usado en Espa\u00f1a.\n\nPermite generar cobros puntuales, recurrentes por fichero o por referencia, y devoluciones.\n\nLa app tiene una vista que escucha las notificaciones del TPV (se debe pedir su activaci\u00f3n a tu banco) y lanza signals para que sean procesadas por tu aplicaci\u00f3n de cobros, para cambiar de estado el pedido, enviar emails de notificaci\u00f3n...\n\nNuevo en la versi\u00f3n 1.1.2: **\u00a1Compatible con python 2.7 y python 3.x!**\nNuevo en la versi\u00f3n 1.1.3: Support django 1.4 + (tested in 1.4, 1.5, 1.6, 1.7)\n\nPara utilizarlo sigue los siguientes pasos\n\n1. Instala el proyecto usando pip o b\u00e1jate las fuentes de github:\n \n 1.1 Intalaci\u00f3n con pip::\n\n pip install django-sermepa\n\n 1.2 Usando las fuentes, b\u00e1jate el proyecto y copia la carpeta sermepa en tu entorno o proyecto.\n\n2. A\u00f1adelo a INSTALLED_APPS del settings.py\n\n .. code:: python\n\n INSTALLED_APPS += ('sermepa',)\n ..\n\n3. Ojo, hay nuevos modelos: syncdb o migrations (no inclu\u00eddas, depende de tu versi\u00f2n de django)\n\n4. A\u00f1ade los siguientes settings::\n\n SERMEPA_URL_PRO = 'https://sis.redsys.es/sis/realizarPago'\n SERMEPA_URL_TEST = 'https://sis-t.redsys.es:25443/sis/realizarPago'\n SERMEPA_MERCHANT_CODE = '327234688' #comercio de test\n SERMEPA_TERMINAL = '002'\n SERMEPA_SECRET_KEY = 'qwertyasdf0123456789'\n SERMEPA_BUTTON_IMG = '/site_media/_img/targets.jpg'\n SERMEPA_CURRENCY = '978' #Euros\n\n Deber\u00e1s modificar SERMEPA_MERCHANT_CODE, SERMEPA_SECRET_KEY, SERMEPA_BUTTON_IMG, SERMEPA_TERMINAL\n\n5. A\u00f1ade la ruta de la respuesta de Sermepa a tus urls:\n\n .. code:: python\n\n (r'^sermepa/', include('sermepa.urls')),\n ..\n \n6. Programa los listeners de las signals de OK, KO y si quieres de error:\n \n 6.1 El listener recibe un objecto de tipo `SermepaResponse `_\n con toda la informaci\u00f3n de la operaci\u00f3n del TPV. Puedes usar un listener que procese todas los casos, o uno por cada caso (OK y KO)\n\n .. code:: python\n\n def payment_ok(sender, **kwargs):\n '''sender es un objecto de clase SermepaResponse. Utiliza el campo Ds_MerchantData\n para asociarlo a tu Pedido o Carrito'''\n pedido = Pedido.objects.get(id=sender.Ds_MerchantData)\n pedido.estado = 'cobrado'\n pedido.Ds_AuthorisationCode = sender.Ds_AuthorisationCode #Guardar este valor en caso\n # de poder hacer devoluciones, es necesario.\n pedido.save()\n send_email_success(pedido)\n\n def payment_ko(sender, **kwargs):\n '''sender es un objecto de clase SermepaResponse. Utiliza el campo Ds_MerchantData\n para asociarlo a tu Pedido o Carrito''\n pass \n\n def sermepa_ipn_error(sender, **kwargs):\n '''Esta se\u00f1al salta cuando el POST data recibido est\u00e1 mal firmado. Solo pasa en caso de intentos de cracking.\n sender es un objecto de clase SermepaResponse. Utiliza el campo Ds_MerchantData\n para asociarlo a tu Pedido o Carrito''\n pass\n ..\n\n 6.2 Asocia el listener a las se\u00f1ales, en alg\u00fan punto que se cargue al iniciar el proyecto, por ejemplo en el models.py\n\n .. code:: python\n\n from sermepa.signals import payment_was_successful\n from sermepa.signals import payment_was_error\n from sermepa.signals import signature_error\n\n payment_was_successful.connect(payment_ok)\n payment_was_error.connect(payment_ko)\n signature_error.connect(sermepa_ipn_error)\n ..\n\n \n7. Utiliza el form de `SermepaPaymentForm `_ para inicializar el bot\u00f3n de pago. \n\n El bot\u00f3n de pago ser\u00e1 un formulario POST a la url del TPV, firmado con tu clave secreta, que deber\u00e1 pasar toda la informaci\u00f3n de la operaci\u00f3n: modalidad de pago, importe (en c\u00e9ntimos), URLs de notificaci\u00f3n, OK y KO, descripci\u00f3n, datos del comercio, identificador de tu pedido, identificador de la operaci\u00f3n...\n \n Existen diferentes modalidades de pago:\n\n 1. Las compras puntuales, el Ds_Merchant_TransactionType='0' y el Ds_Merchant_Order debe ser un string siempre \u00fanico y de 10 caracteres.\n\n 2. Las suscripciones o pagos recurrentes. Existen 2 tipos, por fichero o por referencia.\n\n 2.1 Por fichero, tienen un l\u00edmite de 12 meses o 12 cobros. \n\n 2.1.1 El primer cobro el Ds_Merchant_TransactionType='L' y el Ds_Merchant_Order debe ser siempre \u00fanico. \n \n El tpv responde con el mismo valor pasado en la variable Ds_Order m\u00e1s 2 d\u00edgitos adicionales indicando el n\u00famero de transacci\u00f3n (la primera es 00)\n\n 2.1.2 Los cobros sucesivos se debe pasar el Ds_Merchant_TransactionType='M' y el primer Ds_Merchant_Order\n\n 2.2 Por referencia, no tiene l\u00edmite de tiempo ni de cobros. Este sistema soporta cobros de 0\u20ac para activaciones y cambios de tarjetas.\n\n 2.2.1 El primer cobro el Ds_Merchant_TransactionType='0' y el Ds_Merchant_Order='REQUIRED'\n\n El tpv responde con un nuevo par\u00e1metro Ds_Merchant_Identifier, que hay que almacenar (idreferencia)\n\n 2.2.2 Los cobros sucesivos son Ds_Merchant_TransactionType='0' y el Ds_Merchant_Order=idreferencia (el valor que nos han pasado en el primero cobro)\n\n **Mira el c\u00f3digo del ejemplo** (`sermepa_test/views.py `_) para m\u00e1s info:\n\n .. code:: python\n\n def form(request, trans_type='0'):\n site = Site.objects.get_current()\n amount = int(5.50 * 100) #El precio es en c\u00e9ntimos de euro\n\n sermepa_dict = {\n \"Ds_Merchant_Titular\": 'John Doe',\n \"Ds_Merchant_MerchantData\": 12345, # id del Pedido o Carrito, para identificarlo en el mensaje de vuelta\n \"Ds_Merchant_MerchantName\": 'ACME',\n \"Ds_Merchant_ProductDescription\": 'petardos',\n \"Ds_Merchant_Amount\": amount,\n \"Ds_Merchant_Terminal\": settings.SERMEPA_TERMINAL,\n \"Ds_Merchant_MerchantCode\": settings.SERMEPA_MERCHANT_CODE,\n \"Ds_Merchant_Currency\": settings.SERMEPA_CURRENCY,\n \"Ds_Merchant_MerchantURL\": \"http://%s%s\" % (site.domain, reverse('sermepa_ipn')),\n \"Ds_Merchant_UrlOK\": \"http://%s%s\" % (site.domain, reverse('end')),\n \"Ds_Merchant_UrlKO\": \"http://%s%s\" % (site.domain, reverse('end')),\n \"Ds_Merchant_Order\": SermepaIdTPV.objects.new_idtpv(),\n \"Ds_Merchant_TransactionType\": '0',\n } \n form = SermepaPaymentForm(initial=sermepa_dict)\n \n return HttpResponse(render_to_response('form.html', {'form': form, 'debug': settings.DEBUG}))\n\n..\n\n y el form.html:\n\n .. code:: html\n\n \n \n {% if debug %}\n {{ form.sandbox }}\n {% else %}\n {{ form.render }}\n {% endif %}\n \n \n\n..\n\n8. El TPV enviar\u00e1 una respuesta (SermepaResponse) con la informaci\u00f3n que se le ha enviado m\u00e1s nuevos datos relacionados con el pago. A destacar:\n\n - Ds_MerchantData es el mismo valor enviado en el formulario en el campo Ds_Merchant_MerchantData. Deber\u00eda contener el identificador de tu Pedido o Carrito\n - Ds_Merchant_Identifier: la referencia para cobros recurrentes sucesivos si se utiliza el pago por referencia.\n - Ds_ExpiryDate: Fecha de expiraci\u00f3n de la tarjeta\n - Ds_Card_Number: N\u00famero asteriscado de la tarjeta\n - Ds_AuthorisationCode: C\u00f3digo de la operaci\u00f3n autorizada, para poder hacer una devoluci\u00f3n posterior.\n\n\n\n \n9. Prueba el formulario de compra puntual en http://localhost:8000/ o http://localhost:8000/L/ ...", "description_content_type": null, "docs_url": null, "download_url": null, "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/bcurtu/django-sermepa", "keywords": null, "license": "MIT License", "maintainer": null, "maintainer_email": null, "name": "django-sermepa", "package_url": "https://pypi.org/project/django-sermepa/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-sermepa/", "project_urls": { "Homepage": "https://github.com/bcurtu/django-sermepa" }, "release_url": "https://pypi.org/project/django-sermepa/1.1.3/", "requires_dist": null, "requires_python": null, "summary": "A django app to emit and listen Redsys/sermepa POS payments", "version": "1.1.3" }, "last_serial": 1721752, "releases": { "1.1": [ { "comment_text": "", "digests": { "md5": "3c90b968ccde52402e417c67aff3fea8", "sha256": "0805ca3ac3c0fb7a1e9dd54d150e8ccf83fa65c971c773e634497bbeb2415052" }, "downloads": -1, "filename": "django-sermepa-1.1.tar.gz", "has_sig": false, "md5_digest": "3c90b968ccde52402e417c67aff3fea8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7141, "upload_time": "2015-04-11T21:58:04", "url": "https://files.pythonhosted.org/packages/b5/cd/911777cb296b4cb0b3ef3ad1ca2faccd328a3d8cba18d3add501dc6b15ce/django-sermepa-1.1.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "52c49b7301abbe27960e4d4803ae1c63", "sha256": "e079a2ecfe0c3aa96f853a7b4bdb8a31b8322ba8267c7b6b387c89a0888383bd" }, "downloads": -1, "filename": "django-sermepa-1.1.1.tar.gz", "has_sig": false, "md5_digest": "52c49b7301abbe27960e4d4803ae1c63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7906, "upload_time": "2015-04-11T22:12:58", "url": "https://files.pythonhosted.org/packages/59/6f/bb3c3c9d9f548d2b5de4b8d112fcd264f428fb5205c404ca0c418661fcc0/django-sermepa-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "eededa2b505c99042d9655c10864e11d", "sha256": "9439c59ae3b205f030de4a6e3d1c46ae48daf3fe14dda3b6e53c08d8e0b6c1c7" }, "downloads": -1, "filename": "django-sermepa-1.1.2.tar.gz", "has_sig": false, "md5_digest": "eededa2b505c99042d9655c10864e11d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8107, "upload_time": "2015-04-28T16:16:10", "url": "https://files.pythonhosted.org/packages/41/f8/b5cdf1d0c7e39efa70d0adb91d29cf9cb278e0ca807b672267b99911bc4c/django-sermepa-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "faa64e19c74440a9374c0245119d210b", "sha256": "0abf70cbf30264da4a99242695700d3aeb6670ab026ea571b58320faa1b67867" }, "downloads": -1, "filename": "django-sermepa-1.1.3.tar.gz", "has_sig": false, "md5_digest": "faa64e19c74440a9374c0245119d210b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8687, "upload_time": "2015-09-14T12:12:56", "url": "https://files.pythonhosted.org/packages/c3/84/32372adbe7f4c9ff55f21ce356463c1b689047e73fdaf00f57c1b9763e66/django-sermepa-1.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "faa64e19c74440a9374c0245119d210b", "sha256": "0abf70cbf30264da4a99242695700d3aeb6670ab026ea571b58320faa1b67867" }, "downloads": -1, "filename": "django-sermepa-1.1.3.tar.gz", "has_sig": false, "md5_digest": "faa64e19c74440a9374c0245119d210b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8687, "upload_time": "2015-09-14T12:12:56", "url": "https://files.pythonhosted.org/packages/c3/84/32372adbe7f4c9ff55f21ce356463c1b689047e73fdaf00f57c1b9763e66/django-sermepa-1.1.3.tar.gz" } ] }