如何配置OpenEdx的Ecommerce

         ecommerce是openedx的商品购买模块,在新的openedx版本中,ecommerce已经取代了原来的shoppingcart模块。由于ecommerce模块较为复杂,其与edx-platform通过API接口进行通信。由于这种原因其配置和调试较为困难。为了方便文档的表述,将ecommerce的域名为http://ecommerce.site,将edx-platform中lms模块的域名为http://lms.site,配置过程如下(本操作基于ginkgo.2版本):

一、初始化设置
1、登录http://lms.site/admin/oauth2/client/这个页面(使用超级用户),如果该页面无法访问,检查lms/envs/commony.py的设置是否为如下:
‘ENABLE_OAUTH2_PROVIDER’:true
     在界面上添加一个客户端设置,内容如下(供参考),为了后续记录方便”Client id”和”Client secert”使用了预定义的字符
Name:Ecommerce
Client id:sample_id                (该部分会自动生成,也可以手动修改,注意不要泄露)
Client secret:sample_secert   (该部分会自动生成,也可以手动修改,注意不要泄露)
Client type:Confidential(Web application)
2、登录http://lms.site/admin/edx_oauth2_provider/trustedclient/,在该页面添加并选定一个刚设置的客户端,内容如下:
3、配置ecommerce的基本设置,加载基本环境,使用如下命令:
cd /edx/app/ecommerce/
sudo -H -u ecommerce bash
source ./venvs/ecommerce/bin/activate
      加载基本环境后,创建初始的配置,这个配置会写在数据库中。
cd /edx/app/ecommerce/ecommerce/
manage.py create_or_update_site –site-id=1 –site-domain=ecommerce.site –partner-code=edX –partner-name=’Ginkgo’ –lms-url-root=http://lms.site –payment-processors=paypal –client-id=sample_id –client-secret=sample_secret –from-email=he_yuan_tao@163.com
       上述配置模式只是用paypal支付功能
4、启用LMS的Commerce功能
       此时LMS在支付时并不能转跳到Ecommerce界面,需要再LMS的admin的界面进行配置:
#增加一个选项并进行如下配置
Enabled:勾选
Checkout on ecommerce service:勾选
Single course checkout page: /basket/single-item/
Cache Time To Live:600    #这个数值暂不清楚功能
Recept page:/checkout/receipt/?order_number=
Enable automatic refund approval:勾选
二、配置文件修改
1、LMS和CMS部分的修改
        在lms.env.json文件中修改如下内容:
    “ECOMMERCE_API_URL”: “http://ecommerce.site/api/v2“,
    “ECOMMERCE_PUBLIC_URL_ROOT”: “http://ecommerce.site/“,
    “JWT_AUTH”: {
        “JWT_AUDIENCE”: “SET-ME-PLEASE”,
        “JWT_ISSUER”: “http://lms.site/oauth2“,
        “JWT_SECRET_KEY”: “SET-ME-PLEASE”
    },
    “JWT_ISSUER”: “http://lms.site/oauth2“,
   “LMS_ROOT_URL”: “http://lms.site“,
   “OAUTH_ENFORCE_SECURE”: false,
   “OAUTH_OIDC_ISSUER”: “http://lms.site/oauth2“,
   “FEATURES”:{
        “ENABLE_OAUTH2_PROVIDER”:true,
   }
       在lms.auth.json文件中进行如下字段的修改:
“EDX_API_KEY”: “”  #填写1.1中key的内容
“ECOMMERCE_API_SIGNING_KEY”: “”  #填写1.1中key的内容
        建议对cms.env.json和cms.auth.json的内容进行类似的修改。
2、修改ecommerce的配置文件
       在/edx/etc/ecommerce.yml文件中修改如下内容
ECOMMERCE_URL_ROOT: http://ecommerce.site/
EDX_API_KEY: sample_id
JWT_AUTH:
    JWT_ALGORITHM: HS256
    JWT_DECODE_HANDLER: ecommerce.extensions.api.handlers.jwt_decode_handler
    JWT_ISSUERS:
    – ecommerce_worker
    JWT_LEEWAY: 1
    JWT_SECRET_KEY: SET-ME-PLEASE
    JWT_SECRET_KEYS:
    – SET-ME-PLEASE
    JWT_VERIFY_EXPIRATION: true
LMS_DASHBOARD_URL: http://lms.site/dashboard
LMS_HEARTBEAT_URL: http://lms.site/heartbeat
LMS_URL_ROOT: http://lms.site
OAUTH2_PROVIDER_URL: http://lms.site/oauth2
PAYMENT_PROCESSOR_CONFIG:
        alipay:
            app_id: 2016081900287513
            app_private_key_path: /edx/app/ecommerce/cert/app_private_key.pem          #自己定义的密钥
            alipay_public_key_path: /edx/app/ecommerce/cert/alipay_public_key.pem      #从阿里云下载的公钥
            mode: sandbox
            app_notify_url: http://ecommerce.site/checkout/alipay/
            cancel_url: http://127.0.0.1:8000/commerce/checkout/cancel/
            error_url: http://127.0.0.1:8000/commerce/checkout/error/
            receipt_url: http://127.0.0.1:8000/commerce/checkout/receipt/
SECRET_KEY: sample_secert
SESSION_EXPIRE_AT_BROWSER_CLOSE: false
SOCIAL_AUTH_EDX_OIDC_ID_TOKEN_DECRYPTION_KEY: sample_id
#上面的这个可能用不上
SOCIAL_AUTH_EDX_OIDC_ISSUER: http://lms.site/oauth2
SOCIAL_AUTH_EDX_OIDC_KEY: sample_id
SOCIAL_AUTH_EDX_OIDC_LOGOUT_URL: http://lms.site/logout
SOCIAL_AUTH_EDX_OIDC_SECRET: sample_secert
SOCIAL_AUTH_EDX_OIDC_URL_ROOT: http://lms.site/oauth2
SOCIAL_AUTH_REDIRECT_IS_HTTPS: false
三、细节修改
        配置完成后,支付的流程已经能进行,但由于openedx在支付阶段使用了https来增强支付的安全性。课程购买过程中会发生转跳到https协议网址的情况,但如果网址没有启用https则会发生异常。需要对配置进行修改:
#ecommerce/core/models.py
class SiteConfiguration(models.Model):
    …
    def build_ecommerce_url(self, path=”):
    …
        scheme = ‘http’ if settings.DEBUG else ‘https’     #将此处修改为只支持http协议
        ecommerce_url_root = “{scheme}://{domain}”.format(scheme=scheme, domain=self.site.domain)
        return urljoin(ecommerce_url_root, path)

发表评论

电子邮件地址不会被公开。 必填项已用*标注